2013-01-25 14 views
7

ho un choicebox in javafx contiene 3 elementi lasciamo A B e C così sul cambio di selezione di questo elemento voglio eseguire determinate attività quindi come posso gestire questi eventi?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 voci al choicebox dal database ... Ora voglio sapere come gestire gli eventi di choicebox in JavaFX

risposta

15

Aggiungi un ChangeListener per SelectionModel e selectedIndexProperty del ChoiceBox:

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 ha spiegato abbastanza bene, tuttavia, nel caso in cui si abbia interesse solo sul valore effettivo selezionato nella casella scelta e non ci si preoccupi molto dell'indice, allora si può semplicemente usare selectedItemProperty invece di selectedIn dexProperty.

Anche ChangeListener è un'interfaccia funzionale, è possibile utilizzare lambda qui quando si utilizza java 8. Ho appena modificato l'esempio di Sebastian. Il newValue è un valore appena selezionato.

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));