组合框奇怪的行为(JavaFX 8)
Posted
技术标签:
【中文标题】组合框奇怪的行为(JavaFX 8)【英文标题】:ComboBox strange behaviour (JavaFX 8) 【发布时间】:2014-11-26 12:05:51 【问题描述】:我在启动方法中有这段代码:
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();
我启动程序并选择第二个项目,然后多次单击“更改”按钮。什么都没有发生,这很好。 但是如果我选择项目“6”并单击“更改”按钮,那么组合框会自动选择下一个项目(“7”)。 为什么会发生?
那我们就可以换行了
list.set(5, new StringBuilder("-");
开
list.remove(5);
然后,如果我选择项目“2”并单击“更改”按钮,则不会发生任何事情。如果我再次选择项目“9”并单击“更改”按钮,那么组合框会自动选择上一个项目(“8”)。
我希望如果我只是更改项目,即使用列表的 set 方法,那么组合框不会更改选择。如何应对?
【问题讨论】:
【参考方案1】:我认为这可能是 bugs.openjdk.java.net/browse/JDK-8087838
: ComboBox: Root observable list changing causes very strange selection issues, which is sort of fixed on Java 9, for general availablility Sep 2016
。另见this问题
【讨论】:
【参考方案2】:在这种情况下,您可以使用 ChoiceBox,它对我来说效果很好。只需将 ComboBox 替换为 ChoiceBox。但选择5时按下按钮不会刷新标题到“ - ”。
【讨论】:
【参考方案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);
);
【讨论】:
以上是关于组合框奇怪的行为(JavaFX 8)的主要内容,如果未能解决你的问题,请参考以下文章