FocusTraversalPolicy

FocusTraversalPolicy

Как передать фокус ввода от одного элемента другому? Элементы принадлежат какому-то контейнеру. У контейнера есть политика передачи фокуса ввода, т.е. когда мы жмём, например на Tab, курсор перемещается в следующий элемент. Порядок передачи фокуса ввода определяется последовательностью установки элементов в данный контейнер. Но если надо изменить этот порядок, тогда либо переустановить содержимое контейнера в новом порядке, либо изменить политику передачи фокуса ввода.

Чтоб изменить политику, создадим наследника от класса FocusTraversalPolicy и установим эту новую политику в контейнер.
Пример:

В функциях getComponentAfter и getComponentBefore устанавливаем порядок перехода между элементами управления. Контейнером элементов в примере является форма, установим туда новую политику:

mainFrame.setFocusTraversalPolicy(new NeueMeinePolitik());

Теперь переходы пойдут в соответствии с новой политикой.
Элемент управления JComboBox не должен, в нашем случае, получать фокус ввода:

cb.setFocusable(false);

Получаем: FocusTraversalPolicy, Java такой результат.