Javafx组合框

Javafx组合框,javafx,combobox,observablelist,Javafx,Combobox,Observablelist,我想使用3个具有相同选项集的组合框。一旦从一个组合框中选择了一个组合框,其他组合框中的选择将被取消,或者它们都保留相同的选择,但一次只允许一个组合框进行该特定选择。因此,对于第二个选项,如果框1选择“黄色”,然后框2选择“黄色”,那么框1现在正在等待选择。我尝试了一些使用组合框、jComboxes和ObservableList/ObservableItemList的方法,但仍然无法理解。我想也许用一个听众,但也被难倒了 我像这样设置代码 ObservableList<String&

我想使用3个具有相同选项集的组合框。一旦从一个组合框中选择了一个组合框,其他组合框中的选择将被取消,或者它们都保留相同的选择,但一次只允许一个组合框进行该特定选择。因此,对于第二个选项,如果框1选择“黄色”,然后框2选择“黄色”,那么框1现在正在等待选择。我尝试了一些使用组合框、jComboxes和ObservableList/ObservableItemList的方法,但仍然无法理解。我想也许用一个听众,但也被难倒了

我像这样设置代码

    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);

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

col.valueProperty().addListener((obs, old, val)->updateValue(val, col));
col2.valueProperty().addListener((obs,old,val)->updateValue(val,col2));
col3.valueProperty().addListener((obs,old,val)->updateValue(val,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);
        }
    });
}
col.valueProperty().addListener((obs, old, val)->updateValue(val, col));
col2.valueProperty().addListener((obs,old,val)->updateValue(val,col2));
col3.valueProperty().addListener((obs,old,val)->updateValue(val,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);
        }
    });
}