Mac OS中的系统托盘(菜单附加)图标使用Java

时间:2009-12-28 18:36:12

标签: java macos desktop-application system-tray

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

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

我怎样才能做到这一点?

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

感谢。

2 个答案:

答案 0 :(得分:18)

AWT / Swing

根据documentation,OSX 10.5更新1和更新支持TrayIcon s

  

TrayIcons在Mac OS X上有代表   使用呈现的NSStatusMenus   在标准系统的左侧   菜单附加。 java.awt.Image   TrayIcon的艺术作品出现在   根据Mac OS X标准的灰度   菜单附加功能。

     

TrayIcon.displayMessage()提供了一个   小型非模态对话框定位   在TrayIcon下。 ActionListener   因为TrayIcon只有被解雇了   非模态对话框上的“确定”按钮是   按下,而不是窗口   使用窗口关闭按钮关闭。

     

多次调用   TrayIcon.displayMessage()将解散   先前的消息,只留下最后的消息   信息。如果申请不在   前景的时候   调用TrayIcon.displayMessage(),   该应用程序弹出其图标   码头。消息窗口是标记的   使用应用程序的图标   确定哪个应用程序   触发了通知。

noah提供了此示例:

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

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

SWT

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

  

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

This snippet显示如何创建菜单和图标并将其放入托盘。

答案 1 :(得分:1)

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