如何失去对JFrame的关注?

时间:2013-11-17 14:34:23

标签: java swing focus jframe

我在java中制作某种屏幕键盘。所以我需要JFrame失去焦点(因此,将焦点转移到下一个窗口)来发送击键。有没有办法让JFrame窗口失去焦点?

例如,在Windows上,如果您打开本机屏幕键盘,您可以按下那里的按钮,同时屏幕上的窗口本身不在焦点上,而是一个不同的窗口获取输入。 enter image description here

为清楚起见,我正在尝试复制原生屏幕键盘的功能。所以我正在制作的那个将用于我打开的任何和所有窗口,而不仅仅是Java。我正在使用Robot类来模拟击键。

总而言之,我需要我的JFrame:

  • 留在其他窗口之上(完成。使用setAlwaysOnTop(true);
  • 没有焦点(因此,关键笔划可以发送到目前顶级窗口的任何位置)

2 个答案:

答案 0 :(得分:2)

我无法相信我有多愚蠢,答案就在那里。我不知道我是如何错过它的,但setFocusableWindowState(false);正是我所寻找的。在JFrame上使用该标志,它不会聚焦。

答案 1 :(得分:1)

我猜你的第二个窗口是另一个JFrame,也许?如果是这样,请将辅助窗口放在链接到主要主JFrame的JDialog中(即,将JFrame传递给JDialog的构造函数)。这将为您提供您想要的。

有关更具体的帮助,请考虑创建一个非常简单的小示例程序来演示您的问题。例如,它可以在对话框窗口中只有一个JButton sscce


修改
在阅读了更新后的问题后,我担心您的问题无法通过核心Java解决,并且可能需要一些本机编码,可能通过JNI或JNA。请理解,为了使Java可以在多个平台上使用,它被构建为尽可能与OS无关,因此需要与低级OS调用隔离,这是您所需程序工作所需的调用。