ChoiceBox Elemente: Sprache ändern

  • Themenstarter Themenstarter Gelöschtes Mitglied 67123
  • Beginndatum Beginndatum
G

Gelöschtes Mitglied 67123

Gast
Momentan enthalten (Beispiele):
  • Hallo
  • Test
  • Ich mag Kloschüssel

Soll zu Folgendem verändert werden:
  • Hello
  • Test
  • I like toilet bowls

Ich könnte zwar einfach Folgendes machen, aber für 10 andere Sprachen würde es sehr viel werden:
Java:
// Englisch
choiceBox.getItems().remove(0, X);
choiceBox.getItems().addAll("Hello", "Test", "I like toilet bowls");
    
// Chinesisch oder so
choiceBox.getItems().remove(0, X);
choiceBox.getItems().addAll("ChingChong", "GuangDong", "DingDong"); // Sorry, das soll nicht rassistisch sein oder so!
Ich nutze bereits ResourceBundle, aber wie kann ich auch für ChoiceBox die Sprache mit ändern, ohne dass ich so viel Code brauche und jedes Element immer wieder ersetzen muss?
 
Du kannst die Werte doch aus dem resource bundle holen und im Code dann in der Art füllen:

Java:
choiceBox.getItems.addAll(
    resources.getString("hallo-text"),
    resources.getString("test-text"),
    resources.getString("toilet-like-text")
    );

resources ist dabei natürlich ein ResourceBundle, das Du geladen haben musst.
 
Du kannst die Werte doch aus dem resource bundle holen und im Code dann in der Art füllen:

Java:
choiceBox.getItems.addAll(
    resources.getString("hallo-text"),
    resources.getString("test-text"),
    resources.getString("toilet-like-text")
    );

resources ist dabei natürlich ein ResourceBundle, das Du geladen haben musst.
Aber choiceBox.getItems().remove(0, Anzahl der Elemente); muss ich trotzdem machen oder? Oder gibt es da etwas Einfacheres?
 

Du kannst die Werte doch aus dem resource bundle holen und im Code dann in der Art füllen:

Java:
choiceBox.getItems.addAll(
    resources.getString("hallo-text"),
    resources.getString("test-text"),
    resources.getString("toilet-like-text")
    );

resources ist dabei natürlich ein ResourceBundle, das Du geladen haben musst.
Das Einbauen funktioniert, aber der Wert der ChoiceBox wird bei jedem Neusetzen auf null gesetzt.
Java:
        choiceBox.getItems().clear();
        choiceBox.getItems().addAll(
                langB.getString("Left.text"),
                langB.getString("Wheel.text"),
                langB.getString("Right.text")
        );
        if (choiceBox.getValue() == null) choiceBox.getSelectionModel().selectFirst();
Letzte Zeile habe ich nur, damit auch etwas ausgewählt ist. Aber immer wenn die Sprache geändert wird, ist der Wert wieder null und nicht bei dem Element, das man zuvor ausgewählt hatte.
Dass immer das 0. Element ausgewählt wird, ist verständlich, weil ja die ChoiceBox geleert wird, aber nicht, dass es immer null ist.
Wobei es auch gut wäre, wenn das gleiche Element gleich wieder ausgewählt wäre.
 
Die Reihenfolge der Felder ist ja immer gleich - du kannst also den Index vorher mit getSelectedIndex() auslesen und dann mit setSelectedIndex neu setzen.

Ich habe das jetzt nicht ausprobiert, aber das wäre mein erster Ansatz. Dabei ggf. aufpassen: Falls noch nichts gewählt wurde, dann funktioniert das ggf. nicht - daher auf isEmpty() prüfen. (Das sind alles Methoden vom SelectionModel bzw. SingleSelectionModel das ChoiceBox.getSelectionModel() zurück geben sollte)
 
Die Reihenfolge der Felder ist ja immer gleich - du kannst also den Index vorher mit getSelectedIndex() auslesen und dann mit setSelectedIndex neu setzen.

Ich habe das jetzt nicht ausprobiert, aber das wäre mein erster Ansatz. Dabei ggf. aufpassen: Falls noch nichts gewählt wurde, dann funktioniert das ggf. nicht - daher auf isEmpty() prüfen. (Das sind alles Methoden vom SelectionModel bzw. SingleSelectionModel das ChoiceBox.getSelectionModel() zurück geben sollte)
Statt .isEmpty() muss ich wohl == null verwenden. Doch das Speichern von SelectedIndex funktionuckelt noch nicht richtig.
  • Beim Starten des Programms muss das 1. Element ausgewählt werden. > choiceBox.selectFirst();
  • Beim Auswählen muss SelectedIndex gespeichert werden. > choiceBox.setOnMouseClicked((v) -> savedIndex = choiceBox.getSelectionModel().getSelectedIndex();
  • Beim Ändern der Sprache muss der vorherige Wert wieder ausgewählt werden. > choiceBox.select(savedIndex);
Doch wenn die Sprache geändert wird, wird choiceBox.setOnMouseClicked((v) -> { ... } getriggert, obwohl die Items ersetzt werden.
Hm 🤔
 

Zurück
Oben