2012-08-11 7 views
5

Ich habe eine ChoiceBox in eine fxml mit JavaFX Scene Builder gelegt.Welches ChoiceBox-Event wählen?

Der FXML ist eine Steuerung zugewiesen.

Meine Frage ist: Welches Ereignis muss ich registrieren, wenn ich über veränderte Werte informiert werden möchte?

onInputMethodTextChanged="#languageSelectionModified" 

dies mit dem folgenden Code nicht

public void languageSelectionModified(Event event) { 
    ChoiceBox<String> box = (ChoiceBox<String>) event.getSource(); 
    System.out.println(box.getValue()); 
} 

und funktioniert dies nur für den ersten Klick arbeiten (dh die Liste zu öffnen, nicht, wenn ein Element der Auswahl):

onMouseClicked="#languageSelectionModified" 

Obwohl die Maus-Ereignisse aufgrund von Situationen, in denen die Berührung oder die Tastatur die Eingabemethode ist, niemals eine gute Wahl sein würden, beweist es dennoch, dass die System.out erreicht werden kann.

Ich habe absolut keine Ahnung, wo diese Dinge dokumentiert werden (in der Standard-Java-API sind sie nicht)

Antwort

4

hinzufügen Zuhörer zu Ihrem @FXML Auswahlbox in Ihrem Controller injiziert:

choicebox.getSelectionModel().selectedItemProperty().addListener(choiceboxSelectionChangeListener); 

Sie kann auch an das ausgewählte Element binden: einen Zuhörer in einem Controller für eine ComboBox definiert in FXML

label.textProperty().bind(choicebox.getSelectionModel().selectedItemProperty()); 

Hier wird ein example von Einhaken ist. Logik für eine ChoiceBox ist ziemlich identisch.

+0

Vielen Dank für Ihre Antwort! Das funktioniert gut. Also gibt es keine Möglichkeit, dies über die 'normalen' FXML-Events zu tun? Wenn Sie mir sagen könnten, wo ich die vorhandenen (und definierbaren) Ereignisse für FXML-Dateien hätte suchen können, markiere ich Ihre Antwort als Antwort auf meine Frage. – Gundon

+0

Nein, Sie können keine Ereignisse in FXML mit JavaFX 2.0 bis 2.2 suchen. – jewelsea

+0

Das Auswahlmodell-Ereignis wird auch ausgelöst, wenn der Wert der Auswahlbox durch Code festgelegt wird (in meinem Fall habe ich eine Auswahlmöglichkeit, die eine Form von Kind-Auswahlfeldern ausfüllt), und ich wünschte, es gäbe eine saubere Möglichkeit, "benutzergesteuerte Änderungen" zu unterscheiden Code-getriebene. – Mikeb