15

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

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

我怎样才能做到这一点?

如果在 Java 中不可能,是否有任何其他跨平台语言能够做到这一点?

谢谢。

4

2 回答 2

18

AWT / 摇摆

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

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

TrayIcon.displayMessage() 呈现一个位于 TrayIcon 下方的小型非模态对话框。TrayIcon 的 ActionListener 仅在按下非模态对话框上的“确定”按钮时触发,而不是在使用窗口关闭按钮关闭窗口时触发。

多次调用 TrayIcon.displayMessage() 将关闭之前的消息并只留下最后一条消息。如果在调用 TrayIcon.displayMessage() 时应用程序不在前台,则应用程序会在 Dock 中反弹其图标。消息窗口标有应用程序图标,以识别哪个应用程序触发了通知。

诺亚提供了这个样本:

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

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

SWT

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

在 OS X 上运行时,系统托盘上的图标现在会出现在状态栏中。 SWT TrayItem

此片段显示如何创建菜单和图标并将它们放入托盘中。

于 2009-12-28T20:06:12.953 回答
1

我毫不费力地将一个 Windows 应用程序移植到我的 Mac 上。我注意到的一件事是图标是完整的、生动的颜色(不遵循 Mac 惯例)。我需要添加一些特定于操作系统的代码来转换自己。但这是从早期 Java 迭代中依赖 DLL 的桌面集成版本的一大进步。

于 2011-03-29T18:45:02.703 回答