模仿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]()