Как запретить выбор элемента в ComboBox?

У меня есть один ObservableList который я использую в двух ComboBox. Как можно сделать так чтобы, когда пользователь выбрал элемент в одном из них, то этот элемент был не доступен в другом ComboBox и наоборот? Я пытался это сделать с помощью setCellFactory без использования bind. Правильно ли я понял, что эта фабрика ячеек вызывается только один раз при открытие ComboBox? Сейчас же я пытаюсь это сделать с использование Bind, вот мой код контроллера:

public class SelectCardsController implements Initializable {
    
    private ObservableList<String> flashCardObservableList = FXCollections.observableArrayList();

    @FXML
    private ComboBox<String> firstCardList;

    @FXML
    private ComboBox<String> secondCardList;

    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {

        firstCardList.setItems(flashCardObservableList);
        firstCardList.setVisibleRowCount(3);
        secondCardList.setItems(flashCardObservableList);
        secondCardList.setVisibleRowCount(3);

        firstCardList.setCellFactory((final ListView<String> param) -> {
            ListCell<String> cell = new ListCell<>() {
                @Override
                protected void updateItem(String s, boolean b) {
                    super.updateItem(s, b);
                    setText(s);
                }
            };

            cell.disableProperty().bind(Bindings.createBooleanBinding(
                    () -> {
                        String s = cell.getItem();
                        boolean b = false;
                        if (s == null) return false;
                        if (secondCardList.getValue() != null)
                            b = s.equals(secondCardList.getValue());
                        return b;
                    },
                    cell.itemProperty()
            ));
            return cell;
        });
    }
}

cell.disableProperty().bind я попадаю только один раз при первом открытие ComboBox. Есть ли способ добиться желаемого результата?


Ответы (0 шт):