Combobox奇怪的行为(Javafx 8)

 2023-02-16    311  

问题描述

我在开始方法中有此代码:

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″,然后单击”更改”按钮,则将bombobox自动选择下一个项目(” 7″).
为什么会发生?

Combobox奇怪的行为(Javafx 8)

然后我们可以更改行

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

on

list.remove(5);

然后,如果我选择项目” 2″,然后单击”更改”按钮,则什么也不会发生.再一次,如果我选择项目” 9″,然后单击”更改”按钮,然后组合上一个项目(” 8″)自动选择.

我希望如果我只更改项目,即使用列表的集合方法,那么Combobox不会更改选择.如何应付?

推荐答案

我不确定为什么会发生这种情况,这可能与其中的方式有​​关.但这不能使用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);
});

其他推荐答案

您可以在这种情况下使用ChoiceBox,对我来说很好.只需将COMBOBOX用Choicebox替换. But pressing the button when 5 is selected doesn’t refresh the header to “-“.

其他推荐答案

我认为这可能是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.另请参见这

以上所述是小编给大家介绍的Combobox奇怪的行为(Javafx 8),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/33955.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。