Feb 20, 2006

[Mustang] SystemTray にチャレンジ

SystemTray とは

Mustang では Windows のタスクバーステータスエリアにアイコンを表示する機能が追加されたらしい。 わんこ日記さんの[Java]What's cool in AWT on Java SE 6 (Mustang)で紹介されていた。 これは面白そうなので早速チャレンジ。

API Document - Class SystemTray
http://java.sun.com/javase/6/docs/api/java/awt/SystemTray.html

サンプルコード

JDK 6.0beta で試してみたところ、非常に簡単に実現できた。

package jp.in_vitro.codelets.awt;

import java.awt.AWTException;
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.util.logging.Logger;

import javax.swing.ImageIcon;

public class Codelet {

    public static void main(final String... args) throws AWTException,
            InterruptedException {
        Codelet me = new Codelet();
        me.execute();
    }

    public Codelet() {
        super();
    }

    public void execute() throws AWTException, InterruptedException {
        if (SystemTray.isSupported()) {
            // create PopupMenu
            PopupMenu popupMenu = new PopupMenu();
            MenuItem exitMenuItem = new MenuItem();
            exitMenuItem.setLabel("Exit");
            exitMenuItem.addActionListener(new ExitMenuItemActionListener());
            popupMenu.add(exitMenuItem);

            // create TrayIcon
            ImageIcon image = new ImageIcon(this.getClass().getResource(
                    "/trayicon.jpg"));
            TrayIcon icon = new TrayIcon(image.getImage());
            icon.setPopupMenu(popupMenu);

            // enable TrayIcon
            SystemTray tray = SystemTray.getSystemTray();
            tray.add(icon);
        } else {
            Logger.global.info("SystemTray is not supported.");
        }
    }

    protected static class ExitMenuItemActionListener implements ActionListener {
        public void actionPerformed(final ActionEvent evt) {
            System.exit(0);
        }
    }
}

[表示されたトレイアイコン]
表示されたトレイアイコン

[ポップアップメニュー]
ポップアップメニュー