微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Javafx 组合框

如何解决Javafx 组合框

我想使用 3 个具有相同选项集的组合框。一旦从一个组合框中选择一个,其他组合框中的选择就会被消除,或者它们都保持相同的选择,但一次只允许一个选择。因此,对于第二个选项,如果框一选择“黄色”,然后框二选择“黄色”,则框一现在正在等待选择。我已经尝试了一些使用组合框、JcomboBoxes 和 observablelists/observableitemlists 的方法,但仍然无法弄清楚。我想可能会使用监听器,但也被难住了。

我这样设置我的代码

    ObservableList<String> c = FXCollections.observableArrayList("Blue","Green","Grey","Red","Black","Yellow");

    ComboBox col = new ComboBox(c);

    ComboBox col2 = new ComboBox(c);

    ComboBox col3 = new ComboBox(c);

Here is how the comboboxes all look

在对 Sai Dandem 的帮助进行一些测试和修改后,这是为关注此帖子的任何人提供的最终代码。他的代码大部分都可以工作,但存在空指针异常的问题,并且代码有时无法按需要清除所有框。

    col.getSelectionModel().selectedItemproperty().addListener((obs,old,val)-> {
        if(col2.getSelectionModel().getSelectedItem() != null && col2.getSelectionModel().getSelectedItem().equals(val)) {
            col2.setValue(null);
        }
        if(col3.getSelectionModel().getSelectedItem() != null && col3.getSelectionModel().getSelectedItem().equals(val)) {
            col3.setValue(null);
        }
    });
    col2.getSelectionModel().selectedItemproperty().addListener((obs,val)-> {
        if(col.getSelectionModel().getSelectedItem() != null && col.getSelectionModel().getSelectedItem().equals(val)) {
            col.setValue(null);
        }
        if(col3.getSelectionModel().getSelectedItem() != null && col3.getSelectionModel().getSelectedItem().equals(val)) {
            col3.setValue(null);
        }
    });
    col3.getSelectionModel().selectedItemproperty().addListener((obs,val)-> {
        if(col.getSelectionModel().getSelectedItem() != null && col.getSelectionModel().getSelectedItem() != null && col.getSelectionModel().getSelectedItem().equals(val)) {
            col.setValue(null);
        }
        if(col2.getSelectionModel().getSelectedItem() != null && col2.getSelectionModel().getSelectedItem().equals(val)) {
            col2.setValue(null);
        }
    });

解决方法

我还没有测试下面的代码,但你可以用这样的东西来做...

col.valueProperty().addListener((obs,old,val)->updateValue(val,col));
col2.valueProperty().addListener((obs,col2));
col3.valueProperty().addListener((obs,col3));

private void updateValue(String val,ComboBox combo){
    Stream.of(col,col2,col3).forEach(c->{
        if(c!=combo && c.getValue().equals(val){
            c.setValue(null);
        }
    });
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。