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()'註冊一個監聽器。當值改變時,該監聽器將被通知(不管它如何改變) –