#変更履歴
-
2020/2/26
- 前の記事へのリンクを追加
-
2021/3/28
- 内容をjavaのコードに変更
- 記述内容をシステムトレイへのアイコン追加のみに変更
- タイトルの変更
- リンクの追加
#初めに
前回でマスコットの表示を作成しましたが、
現状ではアプリケーションの開始を行なった後に終了する手段がありません。
デスクトップで常駐するアプリケーションになることを考えると、
システムトレイにアイコンを追加してアプリを終了できるようにしようと思います。
#システムトレイにアイコン追加
システムトレイへの追加用のクラスを作成していきます。
public final class JDSystemTray {
// 中身はまだ
}
システムトレイにアイコンを追加する処理は以下の通りです。
アイコン追加する際はシステムトレイがサポートされているかどうかチェックしたうえで追加します。
/** システムトレイのアイコン場所 プロジェクト配下からディレクトリを作成しておく*/
private static final String PATH = "/resource/icon/JDSystemTrayIcon.png";
public static void addSystemTray() {
try {
// システムアイコンがサポートされている場合
if (SystemTray.isSupported()) {
// アイコンの生成
var img = ImageIO.read(JDSystemTray.class.getResource(PATH));
// システムトレイの生成
var trayIcon = new TrayIcon(img);
// 画像の自動サイズ調整をする
trayIcon.setImageAutoSize(true);
// ツールチップの設定
trayIcon.setToolTip("デスクトップマスコットシステム");
// システムトレイの取得
var systemTray = SystemTray.getSystemTray();
// システムトレイに追加
systemTray.add(trayIcon);
}
} catch(Throwable e) {
// 何かしらの処理
}
}
これで、システムトレイにアイコンは追加できました。
ただ、これでは追加しただけでクリックしようが何しようが
反応しない置物になっているため、右クリックでメニューが起動できるようにします。
まずは、メニューの作成を行います。
メニューはシステムトレイのアイコンのイベントとして追加するため、
引数でシステムトレイのアイコンをもらうようにします。
private static void crateMenuBer(TrayIcon trayIcon) {
// ポップアップメニューの作成
var popup = new PopupMenu();
// メニューのアイテム
var exit = new MenuItem("アプリケーションの終了");
// メニューのクリックイベントの定義
exit.addActionListener(e -> { System.exit(0); });
// 作成したメニューアイテムを追加
popup.add(exit);
// アイコンに作成したポップアップメニューに追加
trayIcon.setPopupMenu(popup);
}
これで、右クリックした際にメニューが起動するようになりました。
addSystemTrayメソッドにcrateMenuBerメソッドを呼び出す処理を追加することを忘れずに。
テストコードの作成
では、テストコードを作成して動きを確認しましょう。
システムトレイに使用するアイコンはイラストやさんのアイコンをテスト用に使用しました。
public class JDSystemTrayTest {
public static void main(String[] args) {
JDSystemTray.addSystemTray();
}
}
うむ。
#終わりに
今回はマスコットアプリケーションの終了方法について、実装しました。
次はマウス操作で投げたりすることができるようにしてみようと思います。