JavaFX / TreeTableView: связь между выделением и фокусом

Мне нужно уточнить отношения между Focus а также Selection в javafx.scene.control.TreeTableView,

В моем коде я определил:

ttvMainTree.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);

Предположение 1: Я предполагал, что сфокусированный элемент всегда является последним элементом при щелчке левой кнопкой мыши. Также я предполагал, что левый щелчок всегда перемещает выделение. Так что в SelectionMode.SINGLE сфокусированный элемент и выбранный элемент всегда идентичны.

Это казалось правильным в 90% всех ситуаций. В любом случае, после некоторого случайного щелчка левой кнопкой мыши мой код выдает такую ​​картинку:

Любезно подтвердить:

  • Элемент с синим фоном является выбранным элементом
  • Предмет с синей рамкой является сфокусированным предметом

Здесь сфокусированный элемент может быть изменен с помощью левого клика, выбранный элемент, кажется, не подвержен влиянию левого клика.

Мои извинения за то, что не предоставили SSCCE. На данный момент я не знаю, как сократить свой код и воспроизвести это поведение.

Поэтому общий вопрос:

  • Что не так с предположением 1?

2 ответа

Решение

По моему скромному мнению, я не думаю, что есть различие в поведении двух, это скорее отношения, как вы сказали, когда вы выбираете Node, этот запрос фокус. Фокус можно контролировать с помощьюfocusTraversable":

focusTraversable: Указывает, должен ли этот узел быть частью цикла обхода фокуса. Когда это свойство истинно, фокус можно переместить на этот узел и с этого узла, используя обычные клавиши обхода фокуса.

Для вашего случая я думаю, может быть, это потому, что вы выбрали TreeTableView это и ребенок, и родитель Child 2!

Выяснил причину странного поведения моего приложения: прослушиватель выбора вызвал обновление модели данных. В основном список с дочерними элементами был удален, а затем снова заполнен теми же данными. Это вызвало путаницу в выборе модели.

Другие вопросы по тегам