【问题标题】:ComboBox strange behaviour (JavaFX 8)组合框奇怪的行为(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 方法,那么组合框不会更改选择。如何应对?

【问题讨论】:

    标签: java combobox javafx components


    【解决方案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);
        });
        

        【讨论】:

          猜你喜欢
          • 2010-12-23
          • 1970-01-01
          • 2015-10-12
          • 2015-01-14
          • 1970-01-01
          • 1970-01-01
          • 2012-12-25
          • 1970-01-01
          • 2011-06-13
          相关资源
          最近更新 更多