---
category: swing
folder: HideTaskbarButton
title: TrayIconの使用中にJFrameを最小化したとき、タスクバーボタンを非表示にする
tags: [TrayIcon, SystemTray, JFrame]
author: aterai
pubdate: 2015-01-12T02:04:17+09:00
description: TrayIconを使用中にJFrameを最小化した場合に、そのアプリケーションのタスクバーボタンを表示するかどうかを切り替えます。
image: https://lh4.googleusercontent.com/-tzpDxy7_qEA/VLKpHbpgC8I/AAAAAAAANuw/sRLjm08PrO8/s800/HideTaskbarButton.png
---
* 概要 [#summary]
`TrayIcon`を使用中に`JFrame`を最小化した場合に、そのアプリケーションのタスクバーボタンを表示するかどうかを切り替えます。

#download(https://lh4.googleusercontent.com/-tzpDxy7_qEA/VLKpHbpgC8I/AAAAAAAANuw/sRLjm08PrO8/s800/HideTaskbarButton.png)

* サンプルコード [#sourcecode]
#code(link){{
frame.addWindowListener(new WindowAdapter() {
  @Override public void windowIconified(WindowEvent e) {
    if (check.isSelected()) {
      e.getWindow().dispose();
    }
  }
});
// or
// frame.addWindowStateListener(new WindowStateListener() {
//   @Override public void windowStateChanged(WindowEvent e) {
//     if (check.isSelected() && e.getNewState() == Frame.ICONIFIED) {
//       e.getWindow().dispose();
//     }
//   }
// });
}}

* 解説 [#explanation]
上記のサンプルでは、`WindowListener#windowIconified(...)`で`JFrame`が最小化(アイコン化)された場合、`Window#dispose()`でネイティブリソースを開放してタスクバーボタンを非表示にしています。

- `WindowListener#windowIconified(...)`で`JFrame`が最小化(アイコン化)された場合、`Window#dispose()`でネイティブリソースを開放してタスクバーボタンを非表示に変更
- タスクバーボタン: 上記の`Windows 7`でのスクリーンショットでは左下にあるサイズ`40x40`のアイコンが表示されているボタン
- `frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);`を設定している場合、`Java`仮想マシン(`JVM`)内で最後の表示可能なウィンドウを`dispose()`すると通常は`JVM`も終了するが、このサンプルでは`SystemTray`に`TrayIcon`が残っているので`JVM`は終了しない
- この後`tray.remove(icon);`で`TrayIcon`を`SystemTray`から削除すると`JVM`は終了する

* 参考リンク [#reference]
- [[SystemTrayにアイコンを表示>Swing/SystemTray]]
- [https://docs.oracle.com/javase/jp/8/docs/api/java/awt/SystemTray.html SystemTray (Java Platform SE 8)]

* コメント [#comment]
#comment
#comment