29

我正在使用 Java 6 和 Swing使用 sytray 在 Linux 上制作 Java 应用程序。该应用程序看起来很棒(使用系统外观和感觉),但系统托盘看起来很糟糕。我的意思是系统托盘菜单看起来像旧的小部件(Motif?)。我想知道是否有办法设置外观或使系统托盘更漂亮的东西。

这是托盘的屏幕截图: 在此处输入图像描述

4

6 回答 6

8

你试过JXTrayIcon吗?

我在 Ubuntu 10.10 上使用 Compiz 测试了 SwingHelper 的这个演示,它看起来很酷。

更新

到 2020 年,这些链接被打破,这个解决方案在今天有很多缺点。例如,GNOME3 桌面环境已经完全删除了系统托盘图标,并将其替换为 AppIndicator。

Java 的(AWT/Swing)系统托盘支持今天被破坏了。我推荐使用这个 Java 库:https ://github.com/dorkbox/SystemTray

从网站:

专业的、跨平台的 SystemTray 支持 Java 6+ 上的 Swing/AWT、GtkStatusIcon 和 AppIndicator。此库提供 OS 本机菜单和 Swing/AWT 菜单,具体取决于 OS 和桌面环境以及是否启用了 AutoDetect(默认值)。

作为参考,您可以在此处找到原始示例的副本

于 2011-02-03T13:54:28.350 回答
2

Swing 使用模拟的 UI 小部件。它有许多您可以应用的样式或主题。如果您希望获得更多原生结果,则需要寻找另一个小部件工具包。你有几个选择:

  1. 如果您的需求非常基本,您可能会对作为原始 Java UI 工具包的 AWT 感到满意。它使用本机小部件,但它支持的小部件库非常有限。

  2. 如果您想超越 AWT,请考虑在 eclipse.org 上维护的 SWT。它为您提供了丰富的小部件库,这些小部件是本机实现的。

于 2011-01-25T02:44:32.600 回答
2

因为 Swing 在Systray上使用 AWT ,如果你想在 systray 上看起来很棒。也许您可以尝试使用 SWT :)

于 2011-01-31T09:56:41.907 回答
2

我为此编写了自己的库。链接在这里:

http://www.2shared.com/file/sQdjb6aG/jtray.html

用法:

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。

于 2011-01-31T19:48:59.657 回答
1

我自己没有尝试过,但是如果您使用的是 Java 6 Update 10 或更高版本,您可以使用新的 Nimbus 外观和感觉吗?:

使用 Nimbus LAF

我听说过在 Ubuntu 上使用“JPopupMenu”的托盘图标,它使用 Nimbus 的外观和感觉,所以这可能是你最好的选择:

在 TrayIcon 中使用 JPopupMenu

从我所见,单独使用 JPopupMenu 将是一个很大的改进——再加上 Nimbus,它应该很棒。

于 2011-02-01T14:57:09.230 回答
1

一个快速而肮脏的解决方法:创建一个未装饰的 JDialog,为其添加一个 JPopupMenu,并根据需要使其在 TrayIcon 的鼠标侦听器中可见。

于 2011-02-09T11:24:36.030 回答