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
!
Выяснил причину странного поведения моего приложения: прослушиватель выбора вызвал обновление модели данных. В основном список с дочерними элементами был удален, а затем снова заполнен теми же данными. Это вызвало путаницу в выборе модели.