2013-01-25 3 views
7

ich habe eine wahlbox in javafx enthält 3 artikel lassen A B und C so auf änderung der auswahl dieses artikels ich möchte bestimmte aufgaben durchführen, also wie kann ich mit diesen ereignissen umgehen?javafx choicebox events

final ChoiceBox cmbx=new ChoiceBox(); 
    try { 
     while(rs.next()) 
     { 
      cmbx.getItems().add(rs.getString(2)); 

      } 
     } 
     catch (SQLException e) 
      { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 

im Artikel Hinzufügen von Datenbank Auswahlbox ... jetzt möchte ich wissen, wie die Ereignisse der Auswahlbox in javafx

Antwort

15

In der Auswahlbox des selectionmodel und selectedIndexProperty einen Change zu handhaben:

final ChoiceBox<String> box = new ChoiceBox<String>(); 

    box.getItems().add("1"); 
    box.getItems().add("2"); 
    box.getItems().add("3"); 

    box.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() { 
     @Override 
     public void changed(ObservableValue<? extends Number> observableValue, Number number, Number number2) { 
     System.out.println(box.getItems().get((Integer) number2)); 
     } 
    }); 
5

Sebastian erklärte gut genug, nur wenn Sie Interesse nur auf tatsächlichen Wert auf der Auswahlbox ausgewählt haben und nicht viel Wert auf Index, dann können Sie nur selectedItemProperty anstelle von selectedIn verwenden dexProperty.

Auch ChangeListener ist funktionale Schnittstelle, können Sie Lambda hier verwenden, wenn Sie mit Java 8 gehen. Ich habe nur ein wenig modifiziert Sebastian Beispiel. Der newValue ist ein neu gewählter Wert.

ChoiceBox<String> box = new ChoiceBox<String>(); 
box.getItems().add("1"); 
box.getItems().add("2"); 
box.getItems().add("3"); 

box.getSelectionModel() 
    .selectedItemProperty() 
    .addListener((ObservableValue<? extends String> observable, String oldValue, String newValue) -> System.out.println(newValue));