2010-12-06 32 views
2

我有一个Java应用程序,我将打电话给应用程序。应用程序偶尔会显示一个我们称为myFrame的JFrame。应用程序还会显示一个包含在JDialog或JFrame中的JTextArea(我不确定它是哪一个,但是我可以找出是否有必要回答这个问题)。我们称这个JTextArea为“myTextArea”。JFrame即使在看起来失去焦点后仍继续获得击键

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

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

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

这是怎么回事?有没有人听说过一个不可见的JFrame接收按键?不仅接收击键,而且还从其他有重点的组件中窃取它们?

+3

从未见过发生。张贴您的SSCCE(http://sscce.org)来证明问题。 – camickr 2010-12-06 21:37:04

+0

我会*爱*发布我的SSCCE为此。这是一个巨大的应用程序,但这可能需要一些时间。 – 2010-12-06 21:42:54

+2

如果您很快就无法获得适当的解决方案,那么将应用程序降至SSCCE所需的时间可能会花费很长时间。我预测如果你这样做,你会发现自己的问题和解决方案,甚至不需要我们的帮助。 – 2010-12-06 21:52:53

回答

1

我发现什么是基本上导致问题。 MyFrame有一个类MyKeyEventHandler,实施KeyEventDispatcher。即使对于打算用于myTextArea的击键,方法dispatchKeyEvent(KeyEvent e)始终返回错误。因此击键没有达到myTextArea

0

这不是关于切换可见性。 JFrame首先被初始化并且仍然有焦点。你只是让它看不见,并没有从中取走重点。

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

myFrame.add(myTextArea);

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

myTextArea.requestFocus();