1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

デスクトップマスコットを作ってみる。【アプリの終了編】

Last updated at Posted at 2020-02-23

#変更履歴

  • 2020/2/26

    • 前の記事へのリンクを追加
  • 2021/3/28

    • 内容をjavaのコードに変更
    • 記述内容をシステムトレイへのアイコン追加のみに変更
    • タイトルの変更
    • リンクの追加

#初めに

前回でマスコットの表示を作成しましたが、
現状ではアプリケーションの開始を行なった後に終了する手段がありません。

デスクトップで常駐するアプリケーションになることを考えると、
システムトレイにアイコンを追加してアプリを終了できるようにしようと思います。

#システムトレイにアイコン追加

システムトレイへの追加用のクラスを作成していきます。

JDSystemTray.java

public final class JDSystemTray {
    
    // 中身はまだ

}

システムトレイにアイコンを追加する処理は以下の通りです。
アイコン追加する際はシステムトレイがサポートされているかどうかチェックしたうえで追加します。

JDSystemTray.java

/** システムトレイのアイコン場所 プロジェクト配下からディレクトリを作成しておく*/
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) {
        // 何かしらの処理
    }
}

これで、システムトレイにアイコンは追加できました。

ただ、これでは追加しただけでクリックしようが何しようが
反応しない置物になっているため、右クリックでメニューが起動できるようにします。

まずは、メニューの作成を行います。

メニューはシステムトレイのアイコンのイベントとして追加するため、
引数でシステムトレイのアイコンをもらうようにします。

JDSystemTray.java

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メソッドを呼び出す処理を追加することを忘れずに。

テストコードの作成

では、テストコードを作成して動きを確認しましょう。
システムトレイに使用するアイコンはイラストやさんのアイコンをテスト用に使用しました。

JDSystemTrayTest.java

public class JDSystemTrayTest {

    public static void main(String[] args) {
        JDSystemTray.addSystemTray();
    }
}

001.png
↓右クリック↓
002.png

うむ。

#終わりに
今回はマスコットアプリケーションの終了方法について、実装しました。
次はマウス操作で投げたりすることができるようにしてみようと思います。

リンク

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?