java - Swing:从其他应用程序中窃取焦点(在 OS X 中的可用性)

标签 java macos swing system-tray info.plist

我有一个 java swing 应用程序,它大部分时间都在系统托盘中运行。用户可以使用 Tray Menu 执行多个操作。其中一项操作是显示应用程序窗口。我遇到的问题是在 OS X 上的可用性。

在 Windows 中,如果用户调出应用程序窗口然后切换到另一个应用程序,他们可以使用任务栏 切换回我的应用程序。但在 OS X 中,应用程序运行在应用程序没有菜单的模式下,也不会出现在 Command + Tab 列表中。

__LSUIElementinfo.plist 文件

中设置为 true

所以我的问题是,如果用户打开应用程序窗口,稍后切换到另一个应用程序,他们将无法切换回来,除非他们点击窗口本身(可能在许多其他窗口后面)。最简单的方法是用户使用托盘图标再次打开窗口,但由于窗口已经打开,我无法将其置于最前面。

那么,如何将焦点从其他应用程序移开并将我的窗口置于最前面?

编辑:

我的问题不是让“应用程序作为代理运行”。我已经有那个工作了。我遇到的问题是在创建程序窗口时将其置于顶部。我无法在 Java 中执行此操作。

最佳答案

您可以调用activateIgnoringOtherApps:当用户单击菜单栏中的图标(或者您打开窗口时)时使用 true 参数。不过,您必须从 Java 连接到 Cocoa。

关于java - Swing:从其他应用程序中窃取焦点(在 OS X 中的可用性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3356839/

相关文章:

macos - 如何从歌曲文件中获取歌曲的歌词

android - OSX Lion 上的 adb,但无法连接到 galaxy 10.1 选项卡,但在 linux 中运行良好

c++ - 使用 Xcode 7.3.1 编译时出现“unordered_map”文件未找到错误

java - 在需要很长时间的函数之前和之后显示来自 ActionListener 的消息

java - Espresso-web 检查网页元素不存在

java - 数据模型的 DTO 是否应该具有仅用于 Java 序列化的原始数据类型?

java - 并发 findAndModify 查询成功更新同一文档

java - Java中的减法值短缺

Java 2D 游戏 "powered"by repaint();以一种奇怪的方式滞后

java - 具有组件固定宽度和高度的 GridLayout?