У меня есть TreeTableView, который позволяет многопользовательский режим. Я получил ContextMenu для редактирования или удаления выбранных элементов.Отключить ContextMenu с зависимостью от выбора TreeTableView
Удаление и редактирование должны включаться только в том случае, если имеется хотя бы один выбор.
final BooleanBinding isTableSelectionEmpty = Bindings.isEmpty(this.table.getSelectionModel().getSelectedItems());
this.menuItemDelete.disableProperty().bind(isTableSelectionEmpty);
Это работает должным образом.
Но теперь у меня есть зависимости от разных значений выбранных строк. Например, например, что строка является обязательной для системы и ее не следует удалять.
Я попытался следующие, но он не работает
final BooleanBinding invalidSelection = Bindings.and(Bindings.isEmpty(tableSelection),
Bindings.isNotEmpty(tableSelection.filtered(item -> {
this.logger.trace("filtering :" + item);
return item.getValue().getSystemProperty().get();
})));
this.menuItemDelete.disableProperty().bind(invalidSelection);
Не даже отладки трассировки распечатана и значение привязки всегда ложно (что позволяет пункт меню). Теперь я немного потерян. Где моя ошибка?
Спасибо. Работает как шарм. Вы случайно говорите об этой ошибке (https://bugs.openjdk.java.net/browse/JDK-8145887)? – semTex
@semTex Да, кажется, эта ошибка, но я разместил ее на другой странице ... Но, очевидно, они не хотят, чтобы я добавлял дополнительные данные, не заставляя меня регистрироваться ... В противном случае они уже знали бы, что проблема - странная реализация 'ListIterator':' com.sun.javafx.scene.control.ReadOnlyUnbackedObservableList' внутренний класс 'SelectionListIterator', который довольно очевиден BTW, если сравнить индексы, используемые методами' previous'/'next', с индексами возвращаются 'previousIndex' /' nextIndex' и сравнивают все с контрактом 'ListIterator', описанным в документе. – fabian