ComboBox奇怪的行为(JavaFX 8)

时间:2014-10-01 15:29:18

标签: java combobox javafx components

我在start方法中有这个代码:

ObservableList<StringBuilder> list = FXCollections.observableArrayList();
list.add(new StringBuilder("0"));
list.add(new StringBuilder("1"));
list.add(new StringBuilder("2"));
list.add(new StringBuilder("3"));
list.add(new StringBuilder("4"));
list.add(new StringBuilder("5"));
list.add(new StringBuilder("6"));
list.add(new StringBuilder("7"));
list.add(new StringBuilder("8"));
list.add(new StringBuilder("9"));

ComboBox<StringBuilder> combo = new ComboBox<>(list);
Button change = new Button("change");
change.setOnAction((event) -> {
    list.set(5, new StringBuilder("-"));
});

BorderPane borderPane = new BorderPane(combo, null, null, change, null);
Scene scene = new Scene(borderPane);
primaryStage.setScene(scene);
primaryStage.show();

我启动程序并选择第二项,然后点击&#34;更改&#34;按钮好几次。什么都没发生,这很好。 但如果我选择项目&#34; 6&#34;并点击&#34;更改&#34;按钮然后comboBox自动选择下一个项目(&#34; 7&#34;)。 为什么会这样?

然后我们可以改变行

list.set(5, new StringBuilder("-");

list.remove(5);

然后,如果我选择项目&#34; 2&#34;然后点击&#34;更改&#34;按钮然后什么都没发生如果我选择项目&#34; 9&#34;然后点击&#34;更改&#34;按钮然后comboBox自动选择上一个项目(&#34; 8&#34;)。

我希望如果我只是改变项目,即使用list的set方法,那么comboBox不会改变选择。如何应对?

3 个答案:

答案 0 :(得分:3)

我不确定为什么会发生这种情况,这可能与ComboBox处理ObservabeList的方式有关。但是这不能使用ChoiceBox复制。你能和JavaFX团队一起提出JIRA,以便他们看看吗?

作为一种转变,您可以在代码中执行以下操作以暂时修复它:

ComboBox<String> combo = new ComboBox<String>(list);
Button change = new Button("change");
change.setOnAction((event) -> {
    StringBuilder str = combo.getValue();
    list.set(5, new String("-"));
    combo.setValue(str);
});

答案 1 :(得分:2)

在这种情况下你可以使用ChoiceBox,它对我来说很好。只需用ChoiceBox替换ComboBox即可。但是在选择5时按下按钮并不会将标题刷新为&#34; - &#34;。

答案 2 :(得分:1)

我认为这可能是bugs.openjdk.java.net/browse/JDK-8087838ComboBox: Root observable list changing causes very strange selection issues, which is sort of fixed on Java 9, for general availablility Sep 2016。另请参阅this问题