JFrame продолжает получать нажатия клавиш даже после того, как кажется, потерял фокус - PullRequest
2 голосов
/ 06 декабря 2010

У меня есть приложение на Java, которое я назову Приложение . Приложение иногда отображает JFrame, который мы назовем myFrame . Приложение также отобразит JTextArea, содержащуюся либо в JDialog, либо в JFrame (я не уверен, какой именно, но я могу узнать, необходимо ли это для ответа на этот вопрос). Давайте назовем это JTextArea "myTextArea".

Теперь происходит следующая последовательность событий:

  1. Отображаем myFrame. Он имеет фокус, и вы можете дать ему вход.
  2. Мы вызываем myFrame.setVisible (false)
  3. Отображаем myTextArea.
  4. Мы вызываем myTextArea.requestFocus ().
  5. myTextArea имеет фокус (курсор в нем мигает), но все вводимые нажатия клавиш отправляются в myFrame!

Обратите внимание, что myTextArea не содержится в myFrame.

Что здесь происходит? Кто-нибудь слышал о невидимой JFrame, получающей нажатия клавиш? Не только получать нажатия клавиш, но и воровать их у какого-то другого компонента, который имеет фокус?

Ответы [ 2 ]

1 голос
/ 07 декабря 2010

Я обнаружил, что в основном вызывает проблему.MyFrame имеет класс MyKeyEventHandler, который реализует KeyEventDispatcher.Метод dispatchKeyEvent(KeyEvent e) всегда возвращает false, даже для нажатий клавиш, предназначенных для myTextArea.Поэтому нажатия клавиш не достигают myTextArea.

0 голосов
/ 07 декабря 2010

Речь не о переключении видимости. JFrame инициализируется первым и все еще имеет фокус. Вы только делаете его невидимым, не отрывая от него фокус.

Кроме того, ваш JTextBox должен иметь родительский контейнер. Возможно

myFrame.add (myTextArea);

должно работать. Чтобы сместить фокус на JTextArea, используйте:

myTextArea.requestFocus ();

...