トップ 差分 一覧 ソース 置換 検索 ヘルプ PDF RSS ログイン

Javaでタスクトレイにアイコンを表示する

http://sattontanabe.blog86.fc2.com/blog-entry-24.html

基本的には

java.awt.SystemTray;
java.awt.TrayIcon;

を使えば出来る。

private SystemTray tray = SystemTray.getSystemTray();
略
ticon = new TrayIcon(image[0], frame.getTitle(), menu);
tray.add(ticon);

みたいな感じ。

サンプル

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class test {
  public static void main(String[] args) {
    new test();
  }
  
  private JFrame frame;
  private PopupMenu menu;
  private TrayIcon ticon;
  private Image[] image;
  private SystemTray tray = SystemTray.getSystemTray();
  private byte[] INSTANCE_LOCK = new byte[0];
  
  public test() {
    init();
    frame.setVisible(true);
  }
  
  public void init() {
    image = new Image[2];
    // アイコンの設定
    image[0] =
    new ImageIcon(ClassLoader.getSystemResource("tray_icon.gif")).getImage();
    // 点滅アイコン
    image[1] = new ImageIcon(ClassLoader.getSystemResource("tray_icon_light.gif")).getImage();
    
    initGUI();
  }
  
  private void initGUI(){
    // フレーム
    frame = new JFrame("タスクトレイにアイコンを表示・点滅");
    frame.setSize(300, 100);
    frame.setIconImage(image[0]);
    
    // ウィンドウが最小化された時にタスクトレイに格納する
    // ようにWindowListenerクラスを追加。
    frame.addWindowListener(new WindowAdapter() {
        public void windowIconified(WindowEvent e) {
          frame.setVisible(false);
        }
    });
    JPanel jPanel = new JPanel();
    jPanel.setLayout(new FlowLayout());
    jPanel.setSize(new Dimension(219, 70));
    
    JButton lightButton = new JButton("点滅");
    lightButton.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e) {
          replaceImage(image[1]);
          displayMessage("メッセージ", "ここから出してくれ!!");
        }
    });
    
    JButton cancelButton = new JButton("解除");
    cancelButton.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e) {
          replaceImage(image[0]);
        }
    });
    
    jPanel.add(lightButton, null);
    jPanel.add(cancelButton, null);
    frame.add(jPanel);
    // 終了時処理。
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    // フレームを画面中央に表示。
    frame.setLocationRelativeTo(null);
    
    // メニュー
    createPopupMenu();
    // タスクトレイを作成する。
    createTray();
  }
  
  private void createPopupMenu() {
    MenuItem getTrayItem = new MenuItem("タスクトレイから取り出す");
    getTrayItem.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          active();
        }
    });
    
    MenuItem exitItem = new MenuItem("終了");
    exitItem.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          removeTrayIcon();
          frame.setVisible(false);
          frame.dispose();
          System.exit(0);
        }
    });
    menu = new PopupMenu();
    menu.add(getTrayItem);
    menu.add(exitItem);
  }
  
  public void createTray() {
    // システム・トレイがサポートされていなければ終了。
    if (!SystemTray.isSupported()) {
      return;
    }
    ticon = new TrayIcon(image[0], frame.getTitle(), menu);
    ticon.setImageAutoSize(true);
    ticon.addMouseListener(new MouseAdapter(){
        public void mouseClicked(MouseEvent e) {
          if (SwingUtilities.isLeftMouseButton(e)) {
            active();
          }
        }
    });
    try {
      tray.add(ticon);
    } catch (AWTException e1) {
      e1.printStackTrace();
    }
  }
  
  public void removeTrayIcon() {
    tray.remove(ticon);
  }
  
  public void displayMessage(String caption, String text) {
    if (caption != null || text != null) {
      ticon.displayMessage(caption, text,
        TrayIcon.MessageType.INFO);
    }
  }
  
  public void replaceImage(Image image) {
    synchronized (INSTANCE_LOCK) {
      if (!image.equals(ticon.getImage())) {
        ticon.setImage(image);
      }
    }
  }
  
  private void active() {
    // フレームの状態を通常に戻す。
    frame.setExtendedState(JFrame.NORMAL);
    frame.setAlwaysOnTop(true);
    frame.setVisible(true);
    frame.setAlwaysOnTop(false);
  }
  
}
[カテゴリ: プログラミング言語 > Java]

[通知用URL]



  • Hatenaブックマークに追加
  • livedoorクリップに追加
  • del.icio.usに追加
  • FC2ブックマークに追加

最終更新時間:2010年09月13日 23時23分49秒