我在javafx中有一个选项框包含3个项目让A B和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();
}
我从数据库中添加项目到选择框... 现在我想知道如何处理javafx中选择框的事件
答案 0 :(得分: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));
}
});
答案 1 :(得分:11)
塞巴斯蒂安解释得很好,但如果您只对选择框中选择的实际值感兴趣并且不太关心索引,那么您可以使用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) );
答案 2 :(得分:1)
我知道这是一个老问题,但更简单的方法是使用 ChoiceBox.setOnAction(EventHandler)
:
ChoiceBox<String> box = ...;
box.setOnAction(event -> {
System.out.println(box.getValue());
});
或在 FXML 中:
<ChoiceBox fx:id="id" onAction="#controllerMethod">