Как Swing определяет, на какой компонент фокусироваться при нажатии Tab? - PullRequest
2 голосов
/ 28 марта 2011

Как Swing определяет, на какой компонент менять фокус при нажатии Tab ?Связано ли это с порядком, в котором объявлены компоненты?Создано?Добавлен?Их абсолютные позиции на экране?Или нет надежной картины вообще?

Ответы [ 2 ]

3 голосов
/ 28 марта 2011

AWT (или Swing) FocusManager использует FocusTraversalPolicy, чтобы определить, какой компонент получает фокус следующим.

Я думаю, что FocusTraversalPolicy по умолчанию зависит от внешнего вида, но там, где я наблюдал, это было либоContainerOrderFocusTraversalPolicy (который просто сортирует компоненты по индексу в родительском элементе) или LayoutFocusTraversalPolicy.

Этот последний упомянутый класс выполняет некоторое упорядочение компонентов контейнера по их расположению, грубо помещая их в строки и пересекая ихпострочно, и в строках слева направо (или справа налево в локалях RTL).Это лучше всего работает при использовании менеджера компоновки на основе сетки, такого как GridLayout, GridBagLayout, GroupLayout и т. Д.

2 голосов
/ 28 марта 2011

Ах, я убираю свой комментарий.Из ссылки на Hovercraft (выделено мной):

Политика обхода фокуса определяет порядок, в котором осуществляется навигация по группе компонентов.Swing предоставляет класс LayoutFocusTraversalPolicy , который определяет порядок навигации на основе факторов, зависящих от менеджера компоновки , таких как размер, расположение и ориентация компонентов. В пределах цикла фокусировки компоненты могут перемещаться в прямом или обратном направлении.

Должно быть, я пропустил это, когда читал прошлой ночью.

Судно на воздушной подушке, если вы отправите ответ как этот, я удалю его и приму ваш.

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