Java / Swing: проблема с ключевым слушателем - PullRequest
1 голос
/ 19 мая 2010

У меня есть диалоговое окно поиска с JTextField, которое используется в качестве поля поиска.

Когда пользователь что-то печатает, он ищет в БД, показывает результат в JTable и выбирает первый элемент в нем.

Если первый результат - это то, что они искали, я хочу, чтобы они быстро приняли диалоговое окно, нажав Enter (пока фокус JTextField сфокусирован).

Итак, я добавил KeyListener в JTextField, и он работает нормально.

Теперь проблема: Открываемый пользователь может открыть диалоговое окно, нажав клавишу «Ввод», когда кнопка «Поиск» в родительском кадре диалогового окна находится в фокусе.

Отображается диалоговое окно, и JTextField получает событие keyReleased (от клавиши Enter, которая его отображала), поэтому оно отображается и закрывается. Если пользователь удерживает клавишу Enter нажатой, то JTextField получает события keyPressed, keyTyped и keyReleased.

Как можно исправить, не прибегая к уродливым временным решениям?

Платформа Windows 7 x64, кстати.

Спасибо.

1 Ответ

2 голосов
/ 19 мая 2010

Поэтому я добавил KeyListener в JTextField и работает нормально.

Вы НЕ должны использовать KeyListener для этого. Вы должны добавить ActionListener в текстовое поле.

Как правило, вы не должны использовать KeyListeners, которые вы должны использовать Key Bindings .

...