Java 6 と Swing を使用して sytray を使用する Linux で Java アプリケーションを作成しています。アプリは素晴らしい (システムのルック アンド フィールを使用している) ように見えますが、systray はひどいものです。つまり、systray メニューは古いウィジェット (モチーフ?) のように見えます。ルック アンド フィールを設定する方法や、システム トレイをより美しくする方法はあるのでしょうか。
トレイのスクリーンショットを次に示します。
Java 6 と Swing を使用して sytray を使用する Linux で Java アプリケーションを作成しています。アプリは素晴らしい (システムのルック アンド フィールを使用している) ように見えますが、systray はひどいものです。つまり、systray メニューは古いウィジェット (モチーフ?) のように見えます。ルック アンド フィールを設定する方法や、システム トレイをより美しくする方法はあるのでしょうか。
トレイのスクリーンショットを次に示します。
JXTrayIconを試しましたか?
私はCompizを使用してUbuntu10.10でSwingHelperからこのデモをテストしましたが、見た目はかっこいいです。
アップデート
2020年になると、これらのリンクは壊れ、このソリューションには今日多くの欠点があります。たとえば、GNOME3デスクトップ環境では、システムトレイアイコンが完全に削除され、AppIndicatorに置き換えられました。
Java(AWT / Swing)システムトレイのサポートは本日壊れています。このJavaライブラリを使用することをお勧めします:https ://github.com/dorkbox/SystemTray
サイトから:
Java6以降でのSwing/AWT、GtkStatusIcon、およびAppIndicatorのプロフェッショナルなクロスプラットフォームSystemTrayサポート。このライブラリは、OSとデスクトップ環境に応じて、またAutoDetect(デフォルト)が有効になっているかどうかに応じて、OSネイティブメニューとSwing/AWTメニューを提供します。
参考までに、元の例のコピーをここで見つけることができます
Swing はエミュレートされた UI ウィジェットを使用します。適用できる多くのスタイルまたはテーマがあります。よりネイティブな結果が必要な場合は、別のウィジェット ツールキットを探す必要があります。いくつかのオプションがあります:
あなたのニーズが非常に基本的なものであれば、元の Java UI ツールキットである AWT で満足できるかもしれません。ネイティブ ウィジェットを使用しますが、サポートするウィジェットのライブラリは非常に限られています。
AWT を超えたい場合は、eclipse.org で管理されている SWT を検討してください。ネイティブに実装されたウィジェットの豊富なライブラリを提供します。
そのための独自のライブラリを作成しました。リンクは次のとおりです。
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 でも動作するはずです。
Swing はSystrayで AWT を使用するため、systray で見栄えを良くしたい場合。多分あなたはSWTで試すことができます:)
自分で試したことはありませんが、Java 6 Update 10以降を使用している場合は、新しいNimbusルックアンドフィールを使用できますか?:
ニンバスのルックアンドフィールを使用するUbuntuの「JPopupMenu」を使用したトレイアイコンについて聞いたことがあるので、これが最善の策かもしれません。
私が見たところ、JPopupMenuを単独で使用することは大きな改善であり、Nimbusと組み合わせると素晴らしいはずです。
手っ取り早い回避策: 装飾されていない JDialog を作成し、JPopupMenu を追加して、必要に応じて TrayIcon のマウス リスナーから表示できるようにします。