トップ 一覧 置換 検索 ヘルプ RSS ログイン

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

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
http://journal.mycom.co.jp/news/2009/07/07/010/index.html
http://technology.publicitas.com/2008/07/17/
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);
みたいな感じ。

!サンプル
{{code Java
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);
  }
  
}
}}
{{category2 プログラミング言語,Java}}
{{category2 プログラミング言語,COBOL}}