java.awt.SystemTray
トレイ アイコンとバルーン メッセージの作成と管理に使用しています。すべて正常に動作します。
しかし、メッセージが表示された後、メッセージを閉じるかフェードアウトできるかどうかを知りたいです。
現時点では、ユーザーはバルーンをクリックするか閉じる必要があります。そうしないと、メッセージが消えません。
java.awt.SystemTray
トレイ アイコンとバルーン メッセージの作成と管理に使用しています。すべて正常に動作します。
しかし、メッセージが表示された後、メッセージを閉じるかフェードアウトできるかどうかを知りたいです。
現時点では、ユーザーはバルーンをクリックするか閉じる必要があります。そうしないと、メッセージが消えません。
他のプラットフォームについてはよくわかりませんが、Windowsでは、マシンが使用中の場合、つまりユーザーが何かを入力したりマウスを動かしたりしている場合にのみ、メッセージが消えます。マウスを動かしたり何も入力しなかった場合、メッセージはそのままになります。
次のコードは私へのメッセージを示しています。マウスを動かすと、約5秒後に消えます。そうしないと、マウスを動かしたり何かを入力したりするまでその状態が続き、その時点で消えます。
final TrayIcon ti = new TrayIcon(XTPSkin.getInstance().getAppIcon().getImage());
final SystemTray st = SystemTray.getSystemTray();
st.add(ti);
ti.displayMessage("foo", "bar", MessageType.INFO);
時間切れになる前にメッセージを直接削除する方法はありませんが、削除することはできますTrayIcon
(また、必要に応じてすぐに再追加しますが、これは実際には推奨されません)。原因を削除するTrayIcon
と、メッセージも削除されます。
上記に追加された次のコードにより、TrayIcon
とメッセージの両方が削除されます。
SwingUtilities.invokeLater(new Runnable(){
public void run() {
try {
Thread.sleep(1000); // Don't do this
st.remove(ti);
} catch (InterruptedException ie) {
// You won't need this when the sleep is removed
}
}
});
ノート:
AWTException
Thread.sleep
は、デモンストレーションのみを目的としています。このコードはAWTスレッドで実行されるため、実際のコードにそのスリープを含めないでください。TrayIcon
、おそらく悪い考えです。ユーザーがマシンを使用している場合はメッセージが消えるので、これを行わない方がおそらく賢明です。