JFrame即使在看似失去焦点后仍继续接收击键

时间:2010-12-06 20:56:05

标签: java swing jframe jtextarea

我有一个Java应用程序,我称之为 App 。应用程序偶尔会显示一个我们称之为 myFrame 的JFrame。应用程序还将显示一个包含在JDialog或JFrame中的JTextArea(我不知道哪个,但我可以找出是否有必要回答这个问题)。我们将此JTextArea称为“myTextArea”。

现在,发生以下事件序列:

  1. 我们显示myFrame。它有焦点,你可以给它输入。
  2. 我们调用myFrame.setVisible(false)
  3. 我们显示myTextArea。
  4. 我们调用myTextArea.requestFocus()。
  5. myTextArea具有焦点(光标在其中闪烁),但输入的所有击键都被发送到myFrame!
  6. 请注意myTextArea不包含在myFrame中。

    这里发生了什么?有没有人听说过不可见的JFrame接收击键?不仅要接受击键,还要从其他具有焦点的组件中窃取它们?

2 个答案:

答案 0 :(得分:1)

我发现了什么导致了这个问题。 MyFrame有一个实现MyKeyEventHandler的类KeyEventDispatcher。即使针对dispatchKeyEvent(KeyEvent e)的击键,方法myTextArea也始终返回false。因此,击键不会达到myTextArea

答案 1 :(得分:0)

这不是关于切换可见性。 JFrame首先被初始化并且仍然具有焦点。你只是让它变得隐形,而不是从中夺走焦点。

此外,您的JTextBox需要有一个父容器。可能

  

myFrame.add(myTextArea);

应该有效。要将焦点转移到JTextArea,请使用:

  

myTextArea.requestFocus();