在回答關於ChoiceBox
的問題時,我發現了一個有趣的問題(錯誤,可能是?)。在Java 1.8u60中,爲ChoiceBox
添加了以下四種方法:setOnShown
,setOnShowing
,setOnHidden
,setOnHiding
。但我無法讓他們工作!ChoiceBox onShown onHidden方法不起作用JavaFX
public class ComboBoxSample extends Application {
public static void main(String[] args) {
launch(args);
}
@Override public void start(Stage stage) {
stage.setTitle("ComboBoxSample");
Scene scene = new Scene(new Group(), 450, 250);
final ComboBox<String> comboBox = new ComboBox<>();
comboBox.getItems().addAll(
"[email protected]",
"[email protected]"
);
comboBox.setOnShown(event -> {
System.out.println("ComboBox onShown");
System.out.println(comboBox.getSelectionModel().getSelectedIndex());
});
comboBox.setOnShowing(event -> {
System.out.println("ComboBox setOnShowing");
System.out.println(comboBox.getSelectionModel().getSelectedIndex());
});
ChoiceBox<String> choiceBox = new ChoiceBox<>();
choiceBox.setItems(FXCollections.observableArrayList(
"New Document", "Open ")
);
choiceBox.setOnShown(event -> {
System.out.println("ChoiceBox onShown");
System.out.println(choiceBox.getSelectionModel().getSelectedIndex());
});
choiceBox.setOnShowing(event -> {
System.out.println("ChoiceBox onShowing");
System.out.println(choiceBox.getSelectionModel().getSelectedIndex());
});
choiceBox.setOnHidden(event -> {
System.out.println("ChoiceBox setOnHidden");
System.out.println(choiceBox.getSelectionModel().getSelectedIndex());
});
choiceBox.getSelectionModel().selectedIndexProperty().addListener(e -> {
System.out.println("ChoiceBox selectedIndexProperty");
});
GridPane grid = new GridPane();
grid.setVgap(4);
grid.setHgap(10);
grid.setPadding(new Insets(5, 5, 5, 5));
grid.add(new Label("ComboBox: "), 0, 0);
grid.add(comboBox, 1, 0);
grid.add(new Label("ChoiceBox: "), 0, 1);
grid.add(choiceBox, 1, 1);
Group root = (Group)scene.getRoot();
root.getChildren().add(grid);
stage.setScene(scene);
stage.show();
}
}
對於ComboBox
都setOnShown
和setOnShowing
方法工作得很好,但對於ChoiceBox
控制檯輸出是除了selectedIndexProperty
聽衆空。 這是一個已知的bug嗎?'因爲我找不到任何相關的東西。或者代碼有問題?
我使用最新的JDK v1.8.0_121。
[文檔](https://docs.oracle .com/javase/8/javafx/api/javafx/scene/control/ChoiceBox.html)甚至沒有列出這些方法r'ChoiceBox',所以我很驚訝它編譯... – Itai
@sillyfly是的,我已經向Oracle團隊提交了一個錯誤。 – Enigo