ComboBox控件有一个名为setOnAction的方法。此方法采用的是,由文档描述被称为一个事件处理程序:如何以编程方式选择项目时触发ComboBox EventHandler?
组合框的动作,每当在组合框值 属性被改变时调用。这可能是由于值属性为 以编程方式更改,当用户选择弹出式对话框 中的项目时,或者在可编辑组合框的情况下,它可能是当用户提供其自己的输入(是通过
一个文本字段或一些 其他输入机制,当级中的第一负载,我不想组合框默认为空值,我希望它自动选择ComboBox中第一个选项(如果它有一个)getSelectionModel(),selectFirst()方法确实会改变ComboBox的选择,但是由于某种原因它不会触发EventHandler,但是,调用完全相同方法的按钮的EventHandler 将导致EventHandler触发。我究竟做错了什么?
这里是一个简短的测试案例,显示使用JDK 8u40此行为:
import javafx.application.*;
import javafx.stage.*;
import javafx.scene.*;
import javafx.scene.layout.*;
import javafx.scene.control.*;
public class Test extends Application {
public void start(Stage stage) throws Exception {
HBox pane = new HBox();
ComboBox<String> comboBox = new ComboBox<>();
comboBox.getItems().add("Hello");
comboBox.getItems().add("World");
comboBox.setOnAction((e) -> {
System.out.println(comboBox.getSelectionModel().getSelectedItem());
});
Button button = new Button("Select First");
button.setOnAction((e) -> {
comboBox.getSelectionModel().selectFirst();
});
comboBox.getSelectionModel().selectFirst();
pane.getChildren().add(comboBox);
pane.getChildren().add(button);
Scene scene = new Scene(pane);
stage.setScene(scene);
stage.show();
}
}
你也可以用'valueProperty()'注册一个监听器。当值改变时,该监听器将被通知(不管它如何改变) –