2013-08-07 4 views
1

У меня есть JComboBox с прослушивателем клавиш.Как потерять фокус на JComboBox?

Когда я ударил <enter>, я выпалить какое-то действие, , а затем мне нужно потерять фокус на JComboBox!

Чтобы сосредоточиться на нем, я могу сделать JComboBoxObject.grabFocus();

Но делать transferFocus(), чтобы получить фокус к следующему элементу (не все равно, где фокус идет, только от комбинированного окна) не работает.

Выполнение grabFocus() из другого комбинированного блока работает, но для меня это выглядит довольно раздражающим. Есть ли лучшее решение?

+1

Несвязанный: вздох ... не используйте keylisteners .. related: transferFocus (используется для сосредоточенного в настоящее время compoent) должен работать, если он лучше не показывает SSCCE, демонстрирующий то, что _exactly_ вы делаете/пытаетесь достичь. Кстати, вы прочитали учебник о том, как использовать JComboBox, не так ли? У него есть что сказать на низкоуровневых слушателях и (возможно, вы не можете действительно знать) составные компоненты :-) – kleopatra

ответ

3

Я могу предложить вам первым использовать

.getNextFocusableComponent()

, а затем использовать

.requestFocusInWindow()

, что означает его реализации, как это,

JComboBox.getNextFocusableComponent() requestFocusInWindow().

Одно важное замечание, что .getNextFocusableComponent() изжила, но она может работать на самом деле лучше, вы можете использовать его, но если у вас есть какие-либо другое решение, я предпочел бы не использовать это.

+0

нет - не используйте устаревший код, когда-либо. – kleopatra

3

Обновлено: Начиная с этого двухкомпонентного example, добавление любой из этих строк в реализацию actionPerformed(), похоже, делает то, что вы хотите.

combo1.transferFocus(); 
combo2.requestFocusInWindow(); 
+0

вы действительно не рекомендуете жесткое кодирование другого компонента, вы :-) – kleopatra

+0

@ kleopatra прав : Я взял «не волнует» немного слишком буквально; вы должны спросить «FocusTraversalPolicy» прилагаемого «Контейнера», поскольку предлагает устаревший API 'getNextFocusableComponent()'. – trashgod

+2

на самом деле, спрашивая об обходахПолитика слишком низкоуровневая (вам нужно будет подойти, пока не найдете тот, который применим, также проверяя свойства isTraversalPolicyProvider и другие вещи, которые я не помню). Component.transferFocus должен работать нормально. – kleopatra

Смежные вопросы