【问题标题】:How can I create a ComboBox that uses values from another ComboBox? JavaFX如何创建一个使用来自另一个 ComboBox 的值的 ComboBox? JavaFX
【发布时间】:2026-01-09 05:30:01
【问题描述】:

我有两个组合框:fruitsdrinks

fruits 具有字符串:"apple", "orange", "banana"

drinks 具有字符串:"water", "coffee", "juice"

如何创建一个组合框,其中包含用户为fruits ComboBox 和drinks ComboBox 选择的值?

例如:如果用户选择 applewater,则新的 ComboBox 应包含 applewater 作为选项。

【问题讨论】:

    标签: java javafx combobox


    【解决方案1】:

    使用前两个ComboBoxes 的value 属性的侦听器并从中更新第三个的项目:

    @Override
    public void start(Stage primaryStage) {
        ComboBox<String> c1 = new ComboBox<>();
        c1.getItems().addAll("apple", "orange", "banana");
        ComboBox<String> c2 = new ComboBox<>();
        c2.getItems().addAll("water", "coffee", "juice");
        ComboBox<String> c3 = new ComboBox<>();
        ChangeListener<String> listener = (o, oldValue, newValue) -> {
            final List<String> items = c3.getItems();
            int index = items.indexOf(oldValue);
            if (index >= 0) {
                if (newValue == null) {
                    items.remove(index);
                } else {
                    items.set(index, newValue);
                }
            } else if (newValue != null) {
                items.add(newValue);
            }
        };
        c1.valueProperty().addListener(listener);
        c2.valueProperty().addListener(listener);
    
        final VBox vBox = new VBox(c1, c2, c3);
        primaryStage.setScene(new Scene(vBox));
        primaryStage.show(); 
    }
    

    请注意,这不会阻止从两个ComboBoxes 添加相同的字符串。

    如果您只想添加而不删除项目,请将侦听器更改为

    ChangeListener<String> listener = (o, oldValue, newValue) -> {
        final List<String> items = c3.getItems();
        int index = items.indexOf(newValue);
        if (index < 0) {
            items.add(newValue);
        }
    };
    

    此侦听器确实可以防止重复项。

    【讨论】:

      最近更新 更多