模仿Teamcenter(UIHealthDetector) 实现 系统托盘
模仿Teamcenter(UIHealthDetector) 实现
- 包位置: com.teamcenter.rac.common.health.UIHealthDetector (com.teamcenter.rac.common_xxxx.jar)
- 环境:eclipse4.15 + java 8 + windowbuilder
项目结构

项目主要代码
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();
}
}
效果

本文来自博客园,作者:一个小笨蛋,转载请注明原文链接:https://www.cnblogs.com/paylove/p/19114746

浙公网安备 33010602011771号