2

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

现在,发生了以下一系列事件:

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

请注意,myTextArea 不包含在 myFrame 中。

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

4

2 回答 2

1

我发现基本上是什么导致了这个问题。 MyFrame有一个MyKeyEventHandler实现KeyEventDispatcher. dispatchKeyEvent(KeyEvent e)即使对于用于myTextArea. 因此按键没有达到myTextArea

于 2010-12-06T22:58:48.797 回答
0

这不是切换可见性。JFrame 首先被初始化并且仍然具有焦点。你只是让它不可见,而不是从它身上移开焦点。

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

myFrame.add(myTextArea);

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

myTextArea.requestFocus();

于 2010-12-06T21:11:55.557 回答