【问题标题】:Java: Transferring JFrame focus to another JFrameJava:将 JFrame 焦点转移到另一个 JFrame
【发布时间】:2012-07-19 13:50:48
【问题描述】:

我有两个独立的应用程序,每个应用程序都在自己的 JVM 中运行。 App1 实现一个 ServerSocket 并等待请求。 App2 实现一个 Socket 并向 App1 执行请求。

在 App2 执行请求(并将焦点转移到 App1)或 App1 完成请求(并获取焦点)之后,App1 应成为活动进程/窗口。

我该怎么做?

我尝试在 App1 上使用 Window.toFront() 方法,但所发生的只是任务栏中的一个闪烁栏。

【问题讨论】:

  • 您可能需要使用 JNI 或 JNA 来解决此问题,尽管该解决方案将依赖于平台。您是否 100% 确定这些应用程序需要在单独的 JVM 中运行?
  • 请不要在问题中加入诸如信号之类的噪音。
  • 您好,感谢您的回复。两个应用程序独立运行。 App1 是我为公司编写的应用程序,而 App2 是我们的一些合作伙伴编写的第三方软件。 App1 将在中期被 App2 取代。因此,目前我们的代理将使用 App2,如果需要,可以在 App1 中查找其他信息。为了简化工作流程,可以从 App2 发出查找。所以我的上级想要一个解决方案,可以从 App2 发出查找(由于套接字模式可以正常工作),然后将焦点从 App2 转移到 App1 以显示所需的信息。

标签: java swing window focus jframe


【解决方案1】:

您可以尝试将requestFocusInWindow()requestFocus() 与 toFront() 结合使用。但是,不能保证这会成功。焦点行为在一定程度上依赖于平台。

从另一个问题来看,这个功能似乎可以在 Windows 7 上运行:

private void BringToFront() {
    java.awt.EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            if(jFrame != null) {
                jFrame.toFront();
                jFrame.repaint();
            }
        }
    });
}

【讨论】:

  • 稍微编辑了我的答案,但取决于操作系统请求 JFrame 中组件的焦点可能会使窗口出现在前面。我知道它适用于 Windows XP,但从未在 Windows 7 上尝试过。
  • 谢谢。 Downvote 已删除,upvote 已给予。值得一试,看看这是否可行。
  • 您好,感谢您的回复。我在 Windows XP 机器上尝试了所有可能的组合,但没有成功。所有尝试都只是在任务栏中突出显示 App1 的栏。
  • 我尝试了上面的代码示例。我尝试了 JFrame.requestFocus()、JFrame.requestFocusInWindow()、JFrame.repaint() 以及代码示例和上述方法的变体。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 1970-01-01
  • 2013-12-17
  • 2013-06-21
  • 1970-01-01
  • 1970-01-01
  • 2018-10-02
相关资源
最近更新 更多