模仿Teamcenter(UIHealthDetector) 实现 系统托盘

模仿Teamcenter(UIHealthDetector) 实现

  • 包位置: com.teamcenter.rac.common.health.UIHealthDetector (com.teamcenter.rac.common_xxxx.jar)
  • 环境:eclipse4.15 + java 8 + windowbuilder

项目结构

image

项目主要代码

package com.tray.test;
import java.io.IOException;
import java.io.InputStream;

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tray;
import org.eclipse.swt.widgets.TrayItem;

public class SystemTrayExample {
    public static void main(String[] args) throws IOException {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setText("系统托盘示例");
        shell.setSize(300, 200);
        // 获取系统托盘
        Tray tray = display.getSystemTray();
        if (tray == null) {
            System.out.println("当前系统不支持系统托盘");
            return;
        }
        // 创建托盘项
        TrayItem trayItem = new TrayItem(tray, SWT.NONE);
        // 设置托盘图标(需要替换为实际的图标路径)
        InputStream iconIs =SystemTrayExample.class.getResourceAsStream("icon.png");
        Image icon = new Image(display, iconIs);
        iconIs.close();
        trayItem.setImage(icon);
        // 设置提示文本(鼠标悬停时显示)
        trayItem.setToolTipText("我的应用程序");
        // 创建右键菜单
        Menu menu = new Menu(shell, SWT.POP_UP);
        // 添加菜单项目
        MenuItem showItem = new MenuItem(menu, SWT.PUSH);
        showItem.setText("显示窗口");
        showItem.addListener(SWT.Selection, e -> {
            shell.setVisible(true);
            shell.setActive();
        });
        MenuItem exitItem = new MenuItem(menu, SWT.PUSH);
        exitItem.setText("退出");
        exitItem.addListener(SWT.Selection, e -> {
            icon.dispose();
            shell.dispose();
            display.dispose();
        });
        // 为托盘项添加鼠标事件,在右键点击时显示菜单
        trayItem.addListener(SWT.MenuDetect, e->{
        	menu.setLocation(display.getCursorLocation());
        	menu.setVisible(true);
        });
        // 添加托盘项点击事件(双击显示窗口)      
        trayItem.addListener(SWT.DefaultSelection, e -> {
            shell.setVisible(true);
            shell.setActive();
        });
        // 窗口关闭时最小化到托盘而不是退出
        shell.addListener(SWT.Close, e -> {
            e.doit = false; // 取消默认关闭行为
            shell.setVisible(false);
        });
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
        icon.dispose();
        display.dispose();
    }
}

效果

image

posted @ 2025-09-27 09:16  一个小笨蛋  阅读(16)  评论(0)    收藏  举报