Java JFrame即使在看起来失去焦点后仍继续接收按键

Java JFrame即使在看起来失去焦点后仍继续接收按键,java,swing,jframe,jtextarea,Java,Swing,Jframe,Jtextarea,我有一个Java应用程序,我称之为app。应用程序偶尔会显示一个我们称之为myFrame的JFrame。这个应用程序还将显示一个JTextArea,它包含在JDialog或JFrame中(我不确定是哪个,但我可以找出是否有必要回答这个问题)。让我们把这个JTextArea称为“myTextArea” 现在,发生以下一系列事件: 我们展示我的框架。它有焦点,你可以给它输入 我们称之为myFrame.setVisible(false) 我们显示myTextArea 我们称之为myTextArea.r

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

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

  • 我们展示我的框架。它有焦点,你可以给它输入
  • 我们称之为myFrame.setVisible(false)
  • 我们显示myTextArea
  • 我们称之为myTextArea.requestFocus()
  • myTextArea具有焦点(光标在其中闪烁),但所有输入的按键都会发送到myFrame 请注意,myTextArea不包含在myFrame中


    这是怎么回事?有人听说过不可见的JFrame接收击键吗?不仅接收击键,而且从其他具有焦点的组件窃取击键?

    这与切换可见性无关。JFrame首先初始化,并且仍然具有焦点。你只是让它隐形,而不是让它失去焦点

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

    myFrame.add(myTextArea)

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

    myTextArea.requestFocus()


    我找到了问题的根本原因
    MyFrame
    有一个实现
    KeyEventDispatcher
    的类
    MyKeyEventHandler
    。方法
    dispatchKeyEvent(KeyEvent e)
    始终返回false,即使是针对
    myTextArea
    的按键笔划。因此,按键没有到达
    myTextArea

    很抱歉,这个文本框就是TextArea。调用myTextArea.requestFocus()并不能解决问题(尽管它可能是修复的必要部分)。当您使框架不可见时,操作系统会确定桌面上的哪个其他窗口获得焦点。我怀疑使用“requestFocus”会解决问题,但即使是焦点问题,使用的方法也是错误的。请阅读requestFocus方法API说明以了解要使用的正确方法。从未出现过这种情况。发布你的SSCCE()来演示这个问题。我很乐意为此发布我的SSCCE。不过,这是一个庞大的应用程序,可能需要一些时间。如果你不能很快找到合适的解决方案,那么将你的应用程序缩减为SSCCE所需的时间可能是值得花的。我预测如果你这样做,你会自己找到问题和解决方案,甚至不需要我们的帮助。谢谢你的后续报道。1+代表。