javafx选择框事件

Jay*_*aik 10 javafx javafx-2

我在javafx中有一个选项框包含3个项目让AB和C所以改变这个项目的选择我想执行某个任务所以我该如何处理这个事件?

 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();
        }
Run Code Online (Sandbox Code Playgroud)

即时通讯从数据库添加项目到选择框...现在我想知道如何在javafx中处理选择框的事件

Seb*_*ian 20

将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));
      }
    });
Run Code Online (Sandbox Code Playgroud)


Ste*_*ark 12

塞巴斯蒂安解释得很好,只是如果你只对选择框中选择的实际值感兴趣并且不太关心索引,那么你可以使用selectedItemProperty而不是selectedIndexProperty.

另外ChangeListener是功能接口,当你使用java 8时,你可以在这里使用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) );
Run Code Online (Sandbox Code Playgroud)


abc*_*abc 7

我知道这是一个老问题,但更简单的方法是使用ChoiceBox.setOnAction(EventHandler)

ChoiceBox<String> box = ...;
box.setOnAction(event -> {
    System.out.println(box.getValue());
});
Run Code Online (Sandbox Code Playgroud)

或在 FXML 中:

<ChoiceBox fx:id="id" onAction="#controllerMethod">
Run Code Online (Sandbox Code Playgroud)