2013-01-25 109 views
7

我在javafx中有一個選擇框包含3個項目讓A B和C等這個項目的選擇變化我想執行某些任務,所以我如何處理這個事件?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將項目添加到數據庫,從... choicebox現在 我想知道如何處理choicebox事件中的JavaFX

回答

15

添加一個ChangeListener ChoiceBox的selectionModel設置和selectedIndexProperty:

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)); 
     } 
    }); 
012-
5

雖然塞巴斯蒂安解釋得不錯,但如果您只對選擇框中選擇的實際值感興趣並且不太在乎索引,那麼您可以使用selectedItemProperty而不是selectedIn dexProperty。

另外ChangeListener是函數接口,當你用java8時,你可以使用lambda。我只是稍微修改了一下Sebastian的例子。 newValue是新選定的值。

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)); 
相關問題