2013-01-25 25 views
7

tôi có một hộp chọn trong javafx chứa 3 mục cho A B và C để thay đổi lựa chọn mục này tôi muốn thực hiện tác vụ nhất định để tôi có thể xử lý sự kiện này như thế nào?sự kiện javafx choicebox

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 thêm các mục vào choicebox từ cơ sở dữ liệu ... bây giờ tôi muốn biết làm thế nào để xử lý các sự kiện của choicebox trong JavaFX

Trả lời

15

Thêm một ChangeListener để selectionmodel và selectedIndexProperty của 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 đã giải thích đủ tốt, chỉ cần xem nếu bạn chỉ quan tâm đến giá trị thực được chọn trên hộp lựa chọn và không quan tâm nhiều đến chỉ mục, thì bạn chỉ có thể sử dụng selectedItemProperty thay vì được chọnTrong dexProperty.

Ngoài ra ChangeListener là giao diện chức năng, bạn có thể sử dụng lambda ở đây khi bạn đi với java 8. Tôi chỉ cần sửa đổi chút ví dụ của Sebastian. Giá trị mới là giá trị mới được chọn.

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