【问题标题】:System Tray (Menu Extras) icon in Mac Os using Java使用 Java 的 Mac Os 中的系统托盘(菜单附加)图标
【发布时间】:2010-12-30 13:31:15
【问题描述】:

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

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

我怎样才能做到这一点?

如果在 Java 中无法实现,是否还有其他跨平台语言能够做到这一点?

谢谢。

【问题讨论】:

  • 我在去年看到在 OS X 10.5 上使用 Java 进行这项工作。请显示您的失败代码。
  • 很遗憾,我现在无法访问我的代码,但如果有必要,我以后无法粘贴它。与此示例非常相似(或相等):java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/… 问题是 SystemTray.isSupported() 返回 true,没有抛出异常,但是没有图标 :(

标签: java macos desktop-application system-tray


【解决方案1】:

AWT / 摆动

根据documentation,OSX 10.5 update 1 和更新的支持TrayIcons

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

TrayIcon.displayMessage() 呈现一个 小型非模态对话框定位 在托盘图标下。动作监听器 因为 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 上运行时,系统托盘上的图标会出现在状态栏中。

This snippet 展示了如何创建菜单和图标并将它们放入托盘中。

【讨论】:

  • 这适用于雪豹:java.awt.SystemTray.getSystemTray().add(new java.awt.TrayIcon(java.awt.Toolkit.getDefaultToolkit().getImage("foo. png")));
  • @noah:哎呀,是的,我应该举个例子。
  • 谢谢,我回家试试。我看不出我的代码有什么大的不同,也许这只是一件愚蠢的事情。我不能使用 SWT,但我也会尝试一下。谢谢。
  • sn-p 现在位于Eclipse's git repository
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 2014-06-19
    相关资源
    最近更新 更多