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

Java 實現系統托盤應用:完整代碼與原理解析

     編輯:Java 相關知識

專案簡介

系統托盤是桌面應用常見需求,讓程式長駐背景並提供快速選單存取。本文分享一份基於 java.awt.SystemTray 的完整實現,支援右鍵選單、雙擊還原視窗、訊息氣泡提示等核心功能。

核心實現:SystemTrayDemo.java

public class SystemTrayDemo extends JFrame {
    private TrayIcon trayIcon = null;

    public SystemTrayDemo() {
        this.setTitle("系統托盤");
        jbInit();
        this.setSize(200, 250);
        this.setLocation(300, 300);
    }

    public void jbInit() {
        if (SystemTray.isSupported()) {
            SystemTray tray = SystemTray.getSystemTray();
            Image image = Toolkit.getDefaultToolkit().getImage("newrobot1_256.png");
            PopupMenu popupMenu = new PopupMenu();

            MenuItem exitItem = new MenuItem("exit");
            MenuItem menuItema = new MenuItem("menu a");
            MenuItem menuItemb = new MenuItem("menu b");
            MenuItem menuItemc = new MenuItem("menu c");
            MenuItem menuItemd = new MenuItem("menu d");

            exitItem.addActionListener(e -> {
                try { System.exit(0); } catch (Exception ex) { ex.printStackTrace(); }
            });

            popupMenu.add(menuItema);
            popupMenu.add(menuItemb);
            popupMenu.add(menuItemc);
            popupMenu.add(menuItemd);
            popupMenu.add(exitItem);

            trayIcon = new TrayIcon(image, "系統托盤{thu}", popupMenu);
            trayIcon.setImageAutoSize(true); // 關鍵:自動縮放圖示至適當大小

            trayIcon.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    if (e.getClickCount() == 2) {
                        trayIcon.displayMessage("message", "double click", TrayIcon.MessageType.INFO);
                        showIT(true);
                    }
                }
            });

            try {
                tray.add(trayIcon);
            } catch (AWTException e) {
                System.err.println(e);
            }
        } else {
            System.out.println("你的系統不支援系統托盤");
        }

        // 業務邏輯:主視窗顯示圖片
        ImageIcon icon = new ImageIcon();
        try {
            URL url = new URL("newrobot1_256.png");
            icon = new ImageIcon(url);
        } catch (Exception e) { }
        JLabel label = new JLabel();
        label.setIcon(icon);
        this.add(label);
    }

    public void showIT(boolean visible) {
        if (this.isVisible() != visible) this.setVisible(visible);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(() -> new SystemTrayDemo().setVisible(true));
    }
}

關鍵技術點解析

  1. 平台相容性檢查:SystemTray.isSupported() 必須先調用,避免不支援平台拋出異常
  2. 圖示自動縮放:trayIcon.setImageAutoSize(true) 確保不同 DPI 環境下圖示不失真
  3. 雙擊還原視窗:滑鼠事件中判斷 getClickCount() == 2,呼叫 displayMessage 顯示氣泡提示並還原主視窗
  4. 右鍵選單構建:使用 AWT 的 PopupMenu 與 MenuItem,非 Swing 的 JPopupMenu

效果展示

系統托盤效果圖

原文連結

OSChina 原始碼片段

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved