我正在Linux上制作一个使用Java 6和Swing的sytray的Java应用程序。该应用程序看起来很棒(使用系统外观),但是systray菜单看起来很丑陋。我的意思是systray菜单看起来像旧小部件(Motif?)。 我想知道是否有一种方法可以设置外观和感觉或其他东西,使系统托盘更漂亮。
这是托盘的屏幕截图:
你尝试过JXTrayIcon吗?
我在Ubuntu 10.10上使用Compiz测试了SwingHelper的这个演示,看起来很酷。
更新
截至2020年,这些链接已经失效,此解决方案今天存在许多缺点。例如,GNOME3桌面环境已完全删除系统托盘图标,并将其替换为AppIndicator。
Java(AWT / Swing)系统托盘支持今天已经不可用。我建议使用这个Java库:https://github.com/dorkbox/SystemTray
来自该网站:
专业的、跨平台的Swing / AWT、GtkStatusIcon和AppIndicator系统托盘支持,适用于Java 6+。该库提供了OS本地菜单和Swing / AWT菜单,具体取决于操作系统和桌面环境以及是否启用AutoDetect(默认情况下启用)。
供参考,您可以在此处找到原始示例的副本。
import javax.swing.jtray.*;
JTrayIcon.initSystemTray();
JTrayIcon icon = new JTrayIcon(img, "Tooltip", jpopupmenu);
icon.displayMessage(null, "Title", "Multiline\nsecondline", 3000); // 3 seconds
这个库使用了一些“小技巧”,所以可能在任何Linux平台上的运行效果都不如在Ubuntu上好。它也应该能在Windows和OSX上工作。
如果您的需求非常基础,您可能会满意原始的Java UI工具包AWT。它使用本地小部件,但支持的小部件库非常有限。
如果您想超越AWT,请考虑由Eclipse.org维护的SWT。它为您提供了丰富的小部件库,这些小部件都是以本地方式实现的。
我自己没有尝试过,但是如果你正在使用Java 6更新版10或更高版本,可以使用新的Nimbus外观吗?:
我听说过在Ubuntu上使用“JPopupMenu”的托盘图标,它使用Nimbus外观,所以这可能是你最好的选择:
从我看到的,仅使用JPopupMenu就会有很大的改进-再加上Nimbus,它应该很棒。
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
不适用于这些菜单。+1,好问题。 - user257111JPopupMenu
建议时,大多数人最终都会遇到问题(包括来自sunlabs的非常好的JXTrayIcon
类),但是菜单在Linux上仍然无法正常工作。经过多次尝试,我发现将JPanel的可见性绑定为弹出窗口的触发器可以使其正常工作。这是我在Linux中唯一有效的解决方案。请注意,它会添加轻微的延迟,但应该可以修复JPopupMenu
的显示/隐藏问题。https://gist.github.com/tresf/d826eaeecfa887e576f0 - tresf