当前位置: 首页 > news >正文

模仿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

http://www.hskmm.com/?act=detail&tid=18744

相关文章:

  • 一个纯净的自动微分框架—autograd
  • PHP 8.2 vs PHP 8.3 对比:新功能、性能提升和迁移技巧
  • 使用油猴脚本去除浏览器搜索的URL后缀,减少广告
  • 浅谈并分享一种较为高效的学习方法
  • 英语_阅读_Industry 4.0_待读
  • Python获取CPU和内存使用率
  • 解决Python requests库POST请求参数顺序问题
  • 使用Tabs选项卡组件快速搭建鸿蒙APP框架
  • 完整教程:从另一个视角看Transformer:注意力机制就是可微分的k-NN算法
  • ACM 杂题选做 题解合集
  • | 和 || 的区别详解及应用场景对比
  • Kubernetes技巧:使用Prometheus监控Pod性能指标
  • 2025.9.27——1橙
  • 在Java 12环境中配置和部署Apache Tomcat
  • android pdf框架-14,mupdf重排 - 详解
  • 详细介绍:基于物联网的智能衣柜系统的设计(论文+源码)
  • 确定Ceph集群中OSD组件与具体物理磁盘的关联
  • JavaScript加解密实践
  • Linux系统中使用df命令详解磁盘使用情况
  • 读人形机器人24岗位替代
  • 在Ubuntu 18.04/20.04 LTS设置静态DNS服务器
  • 分布式 ID 生成方案实战指南:从选型到落地的全场景避坑手册(三) - 实践
  • 队列+宽搜(BFS)-662.二叉树最大宽度-力扣(LeetCode) - 指南
  • JWT攻防实战:混淆、破解与红队利用技术详解
  • “中国英伟达”投资人,赚翻了
  • The 3rd UCUP Stage 29: Metropolis(QOJ contest 1913) 总结
  • 空白金兰契的多维解构与实践路径:从价值表征困境到人机共生伦理
  • 2025中国制造企业500强榜单发布
  • 读 WPF 源代码 了解获取 GlyphTypeface 的 CharacterToGlyphMap 的数量耗时原因
  • 张江,首个万亿市值巨头诞生!