使用 Java 的 Mac 操作系统中的系统托盘(菜单附加内容)图标

我正在使用Java开发一个桌面应用程序。我想在系统托盘上放置一个图标(带有上下文菜单)(在Mac Os中称为“菜单附加内容”)。Java 6支持在Windows和Linux中执行此操作,但在Mac Os中不起作用。

我已经看到一些应用程序在所有三个操作系统(例如DropBox)中做我想做的事情,但我不知道它们是否是用Java制作的。

我怎样才能做到这一点?

如果在Java中是不可能的,那么有没有其他跨平台语言可以做到这一点?

谢谢。


答案 1

AWT / 秋千

根据文档,OSX 10.5更新1和更新支持TrayIcon

TrayIcons在Mac OS X上使用NSStatusMenus表示,NSStatusMenus显示在标准系统菜单附加组件的左侧。TrayIcon 的 java.awt.Image 插图按照 Mac OS X 菜单附加内容的标准以灰度呈现。

TrayIcon.displayMessage() 显示一个位于 TrayIcon 下方的非模式小对话框。仅当按下非模式对话框上的“确定”按钮时,才会触发 TrayIcon 的 ActionListener,而使用窗口关闭按钮关闭窗口时,则不会触发该操作Listener。

多次调用 TrayIcon.displayMessage() 将消除之前的消息,只留下最后一条消息。如果在调用 TrayIcon.displayMessage() 时应用程序不在前台,则应用程序将在 Dock 中反弹其图标。消息窗口带有应用程序图标的标志,用于标识触发通知的应用程序。

诺亚提供了这个例子:

java.awt.SystemTray.getSystemTray().add(new java.awt.TrayIcon(java.awt.Toolkit.getDefaultToolkit().getImage("foo.png")));

请注意,在将其添加到托盘之前,您可能希望将菜单附加到该图标。

断续器

根据文档,SWT 3.3及更高版本支持OSX上的TrayItem图标。

现在,在 OS X 上运行时,放置在系统托盘上的图标将显示在状态栏中。SWT TrayItem

此代码段演示如何创建菜单和图标并将其放入托盘中。


答案 2

我将Windows应用程序移植到我的Mac上,几乎没有什么困难。我注意到的一件事是图标是完整的,活色的(不遵循Mac惯例)。我需要添加一些特定于操作系统的代码来转换自己。但是,与 Java 的早期迭代相比,这与 DLL 依赖桌面集成版本相比是一大步。