JavaFX: двунаправленное исключение Combobox - PullRequest
0 голосов
/ 16 ноября 2018

В настоящее время я пытаюсь реализовать какое-то поведение "двунаправленного исключения" между двумя комбинированными списками, однако происходит сбой, когда пользователь выбирает значение в обоих комбинированных списках.

Основная идея заключается в том, что если вы выберете элемент в выпадающем списке A, он больше не будет доступен для выбора в выпадающем списке B, и наоборот.

Мой текущий код выглядит следующим образом (внешний класс для простоты опущен):

@Override
public void initialize(URL location, ResourceBundle resources)
{
    final var sourceList = baseList.filtered(new ExclusionPredicate(null));
    final var targetList = baseList.filtered(new ExclusionPredicate(null));

    initChangeListener(sourceSelection, targetList);
    initChangeListener(targetSelection, sourceList);

    sourceSelection.setItems(sourceList);
    targetSelection.setItems(targetList);
}

private void initChangeListener(ComboBox<Item> comboBox, FilteredList<Item> targetList)
{
    comboBox.valueProperty().addListener(((observable, oldValue, newValue) -> {
        if(newValue != null)
        {
            targetList.setPredicate(((ExclusionPredicate) targetList.getPredicate()).updateExclusion(newValue));
        }
    }));
}

private class ExclusionPredicate implements Predicate<Item>
{
    private final Item excluded;

    private ExclusionPredicate(Mailbox excluded)
    {
        this.excluded = excluded;
    }

    @Override
    public boolean test(Item item)
    {
        if(item == null)
        {
            return true;
        }

        return item.equals(excluded);
    }

    private ExclusionPredicate updateExclusion(Item excluded)
    {
        return new ExclusionPredicate(excluded);
    }
}

Когда только один комбинированный список содержит значение, все в порядке - вы больше не можете видеть выбранное значение в комбинированном окне 2. Однако, как только я выбираю значение в выпадающем списке 2, ОБА выпадающие списки теряют свое значение.

Я делаю что-то ужасно неправильное или невозможно реализовать такое поведение в JavaFX? При поиске здесь / в Google можно было найти ответы только о зависимых выпадающих списках, а не о двунаправленных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...