首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 系統托盤應用完整範例:SystemTray 與 TrayIcon 實作

     編輯:Java 相關知識

前言

Java 6 引入 java.awt.SystemTray 與 TrayIcon,讓應用程式能最小化至系統托盤(Windows 任務列通知區、Gnome/KDE 通知區)。本文提供一個完整可執行的範例,展示托盤圖示、右鍵選單、雙擊還原、氣泡訊息與圖示閃爍效果。

核心類別結構

public class TrayDemo extends JFrame implements ActionListener {
    private SystemTray tray;
    private TrayIcon trayIcon;
    private Timer blinkTimer;
    private ImageIcon icon1, icon2;
    private boolean toggle = false;

    public TrayDemo() {
        // 初始化 UI、檢查系統支援、建立托盤圖示與選單
        if (SystemTray.isSupported()) {
            initTray();
        }
        // 視窗狀態監聽:最小化時隱藏至托盤
        addWindowStateListener(e -> {
            if (e.getNewState() == ICONIFIED) hideToTray();
        });
    }

    private void initTray() {
        tray = SystemTray.getSystemTray();
        icon1 = new ImageIcon("icon1.png");
        icon2 = new ImageIcon("icon2.png");

        PopupMenu popup = new PopupMenu();
        MenuItem show = new MenuItem("顯示視窗");
        MenuItem exit = new MenuItem("退出");
        popup.add(show); popup.add(exit);

        trayIcon = new TrayIcon(icon1.getImage(), "托盤範例", popup);
        trayIcon.addMouseListener(new MouseAdapter() {
            @Override public void mouseClicked(MouseEvent e) {
                if (e.getClickCount() == 2) restoreFromTray();
            }
        });
        show.addActionListener(e -> restoreFromTray());
        exit.addActionListener(e -> System.exit(0));

        // 閃爍計時器
        blinkTimer = new Timer(1000, e -> {
            trayIcon.setImage(toggle ? icon2.getImage() : icon1.getImage());
            toggle = !toggle;
        });
        blinkTimer.start();
    }

    private void hideToTray() {
        try { tray.add(trayIcon); setVisible(false); }
        catch (AWTException ex) { ex.printStackTrace(); }
    }

    private void restoreFromTray() {
        tray.remove(trayIcon);
        setVisible(true);
        setExtendedState(NORMAL);
    }

    public static void main(String[] args) {
        new TrayDemo().setVisible(true);
    }
}

關鍵點

  • 必須先呼叫 SystemTray.isSupported() 確認平台支援。
  • TrayIcon 建構子可指定圖示、工具提示、彈出選單。
  • 視窗最小化時隱藏並加入托盤;雙擊托盤圖示或選單項目可還原。
  • 使用 Timer 定期切換圖示達到閃爍提醒效果。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved