【问题标题】:How do I lose the focus on a JFrame?我如何失去对 JFrame 的关注?
【发布时间】:2013-11-17 14:34:23
【问题描述】:

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

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

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

总结一下,我需要我的 JFrame 来:

  • 保持在其他窗口的顶部(完成。使用setAlwaysOnTop(true);)
  • 没有焦点(因此可以将击键发送到当前顶级窗口的任何位置)

【问题讨论】:

  • 下一个窗口是什么?什么设置?当然,诸如 JDialog 之类的对话窗口本质上会这样做,但我不知道这是否能满足您的需求,因为我对您的需求了解有限。请澄清。
  • @HovercraftFullOfEels,我已经用我试图模仿的截图更新了我上面的问题。

标签: java swing focus jframe


【解决方案1】:

我不敢相信我是多么愚蠢,答案就在那里。我不知道我是怎么错过的,但setFocusableWindowState(false); 是我想要的。在 JFrame 上使用该标志,它不会获得焦点。

【讨论】:

    【解决方案2】:

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

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


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

    【讨论】:

    • 不,我没有第二个窗口,我正在使用 Robot 类来复制本机屏幕键盘的功能。所以我将在其他非 Java 窗口上使用我自己的 osk 版本。
    • @Propeller:这不是关于您的问题的关键信息吗?这些信息不应该在您原来的问题中吗?再次考虑编辑您的原始问题,添加此信息,并添加任何其他有助于我们理解您的问题的信息。对于我们和您来说,不得不以零碎的方式不断地从您那里拖出一点点信息,这可能会令人沮丧。例如,告诉我们操作系统,告诉我们细节。
    • 完成。我想这就是我想做的所有事情。
    • 感谢您的信息。我仍然会保留这个问题,以防有人也想顺便过来,并且仍然会想办法让它以某种方式发挥作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 2015-04-08
    • 2014-03-17
    • 1970-01-01
    相关资源
    最近更新 更多