用SWT实现系统托盘(改进版)

java swt 隐藏和显示任务栏图标和托盘图标(2) java swt 实现的隐藏和显示任务栏图标和托盘图标的(导入swt包即可) 立即下载
Eclispe的SWT和JFace功能非常强大,可以开发出相当漂亮的GUI应用程序。
本文用SWT实现了Windows任务栏的系统托盘功能。添加了托盘右击菜单,当窗口最小化时隐藏窗口在任务栏的显示。

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.events.ShellListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.internal.win32.OS;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
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 SystemTray extends Shell {

    /**
     * Launch the application
     *
     * @param args
     */
    public static void main(String args[]) {
        try {
            Display display = Display.getDefault();
            SystemTray shell = new SystemTray(display, SWT.SHELL_TRIM);
            shell.createSystemTray(shell);
            shell.open();
            shell.layout();
            while (!shell.isDisposed()) {
                if (!display.readAndDispatch())
                    display.sleep();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Create the shell
     *
     * @param display
     * @param style
     */
    public SystemTray(Display display, int style) {
        super(display, style);
        createContents();
    }

    /**
     * Create contents of the window
     */
    protected void createContents() {
        setText("SWT Application");
        setSize(500, 375);

    }

    protected void checkSubclass() {
        // Disable the check that prevents subclassing of SWT components
    }

    public void createSystemTray(final Shell shell) {
        // 下面两句的效果是:在任务栏不显示
        final int hWnd = shell.handle;
        OS.SetWindowLong(hWnd, OS.GWL_EXSTYLE, OS.WS_EX_CAPTIONOKBTN);
        shell.addShellListener(new ShellListener() {
            public void shellDeactivated(org.eclipse.swt.events.ShellEvent e) {
                System.out.println("shellDeactivated");
            }

            public void shellActivated(org.eclipse.swt.events.ShellEvent e) {
                System.out.println("shellActivated");
            }

            public void shellClosed(org.eclipse.swt.events.ShellEvent e) {
                System.out.println("shellClosed");
            }

            /**
             * Sent when a shell is un-minimized.
             */
            public void shellDeiconified(org.eclipse.swt.events.ShellEvent e) {
                System.out.println("shellDeiconified");
            }

            /**
             * Sent when a shell is minimized. Shell 最小化后事件
             */
            public void shellIconified(org.eclipse.swt.events.ShellEvent e) {
                // 最小化时不显示在任务栏
                shell.setVisible(false);
                System.out.println("shell.setVisible(false);");
            }

        });

        Display display = shell.getDisplay();
        // Image image = new Image (display, 16, 16);
        Image image = new Image(display, "images/toc_closed.gif");
        final Tray tray = display.getSystemTray();
        final TrayItem trayItem = new TrayItem(tray, SWT.NONE);
        trayItem.setToolTipText("SWT TrayItem");
        trayItem.addListener(SWT.Show, new Listener() {
            public void handleEvent(Event event) {
                System.out.println("show");
            }
        });
        trayItem.addListener(SWT.Hide, new Listener() {
            public void handleEvent(Event event) {
                System.out.println("hide");
            }
        });

        // 托盘单击事件
        trayItem.addListener(SWT.Selection, new Listener() {

            public void handleEvent(Event event) {
                System.out.println("selection");
                // shell.setVisible(true);
                // shell.setMinimized(false);
            }
        });

        // 托盘双击事件
        trayItem.addListener(SWT.DefaultSelection, new Listener() {
            public void handleEvent(Event event) {
                System.out.println("default selection");
                shell.setVisible(true);
                shell.setMinimized(false);
            }
        });

        // 添加托盘右键菜单
        final Menu menu = new Menu(shell, SWT.POP_UP);

        MenuItem menuItemMaximize = new MenuItem(menu, SWT.PUSH);// 最大化菜单
        menuItemMaximize.setText("Maximize");
        menuItemMaximize.addSelectionListener(new SelectionListener() {
            public void widgetSelected(SelectionEvent e) {
                shell.setVisible(true);
                shell.setMaximized(true);
            }

            public void widgetDefaultSelected(SelectionEvent e) {
                // widgetSelected(e);
            }

        });

        MenuItem menuItemMinimize = new MenuItem(menu, SWT.PUSH);// 最小化菜单
        menuItemMinimize.setText("Minimize");
        menuItemMinimize.addSelectionListener(new SelectionListener() {
            public void widgetSelected(SelectionEvent e) {
                shell.setMinimized(true);
            }

            public void widgetDefaultSelected(SelectionEvent e) {
                // widgetSelected(e);
            }
        });

        new MenuItem(menu, SWT.SEPARATOR);// 分割条

        MenuItem menuItemClose = new MenuItem(menu, SWT.PUSH);// 关闭菜单
        menuItemClose.setText("Close");
        menuItemClose.addSelectionListener(new SelectionListener() {
            public void widgetDefaultSelected(SelectionEvent e) {
                Display.getCurrent().close();
            }

            public void widgetSelected(SelectionEvent e) {
                widgetDefaultSelected(e);
            }
        });

        trayItem.addListener(SWT.MenuDetect, new Listener() {
            public void handleEvent(Event event) {
                System.out.println("shell.isVisible():" + shell.isVisible());
                menu.setVisible(true);
                if (shell.isVisible()) {
                    menu.getItem(0).setEnabled(true);
                    menu.getItem(1).setEnabled(true);
                } else {
                    menu.getItem(0).setEnabled(true);
                    menu.getItem(1).setEnabled(false);
                }
            }
        });
        trayItem.setImage(image);

    }

}

欢迎转载!:)      转载请注明出处: http://blog.youkuaiyun.com/techyang
 (完)
图书馆管理系统SWT源码 一个基于SWT设计的图书馆管理系统,可以实现还书借书等一系列图书馆需要的操作 立即下载

相关推荐

JavaSWT考试系统

个人做的考试系统,仅供参考,略有小bug,数据库为mysql

SWT系统托盘

1.创建系统托盘时要通过Display对象的getSystemTray方法的操作系统不同,对系统创建托盘的支持也不同,若系统不支持托盘,则返回null 2.Tray和TrayItem是一对多的关系,同Menu和MenuItem的关系一样。 3.TrayItem通常与一个弹出式菜单连用,配合TrayItem的事件,将菜单显示出来。 4.SWT.Show和SWT.Hide,当系统托盘增多时,会隐

yinlei144的专栏 888

JAVA SWT学生信息管理系统

java SWT 对话框 table 添加 删除 修改 查看信息 menu栏操作 右键点击查看

SWT 中实现最小化到托盘图标,并只能通过托盘的弹出菜单关闭程序

SWT 3.0 开始引入了 Tray,可以在系统栏放置你的程序图标了。

337

【寄存器模型】一、一个简单的寄存器模型

在描述寄存器模型之前,首先来了解一下实际寄存器的组成结构:如下图所示的DUT内部真实的寄存器寄存器中最小的一个单位是域(field),域是由一个或多个bit拼接而成的。一个或多个域就构成了一个寄存器(reg)。一个或多个寄存器就构成了一个块(block)。将DUT中的寄存器抽象出来,建立寄存器模型,如下图所示:uvm library已经定义好了field、reg、block等相关的概念,构建寄存器模型时,只需要继承这些类即可。:构建寄存器模型中的域段。uvm_reg。...

carrotbanana的博客 5368

第18届全国大学生智能汽车竞赛四轮车开源讲解【2.5】-- 图像处理实战:从二值化到边缘检测的工程优化

本文深入讲解了第18届全国大学生智能汽车竞赛四轮车开源项目中图像处理的核心实战技术。文章聚焦于二值化与边缘检测两大关键环节,详细对比了大津法与索贝尔算子的工程应用与优化策略,并分享了遮光、偏振片等物理抗干扰技巧,旨在帮助参赛者构建稳定高效的图像预处理流水线,为赛道识别奠定坚实基础。

weixin_29279047的博客 100

为SWT应用程序创建系统托盘

<br />package rcp.test; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ShellAdapter; import org.eclipse.swt.events.ShellEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.E

JavaMan_chen的专栏 1295

实战解析:基于Python的APT攻击检测与ATT&CK框架应用

本文通过实战案例,详细解析了如何利用Python编程语言结合MITRE ATT&CK框架,构建一套针对高级持续性威胁(APT)的自动化检测与狩猎系统。文章涵盖了从环境搭建、核心检测逻辑编写、到模块化框架设计与主动威胁狩猎的全过程,为安全从业者提供了可落地的技术方案,以有效应对复杂的网络攻击。

weixin_29044157的博客 388

用SWT实现系统托盘

 系统托盘是Windows应用程序常见的应用之一,用SWT可以轻松的实现系统托盘。下面是一个应用的小例子:import org.eclipse.swt.*;import org.eclipse.swt.graphics.*;import org.eclipse.swt.widgets.*;public class Main {    public static void main(String[]

techyang 的专栏 (一万年太久,只争朝夕) 1521

告别VMware Tools!用open-vm-tools在Ubuntu 22.04上搞定共享文件夹(附开机自动挂载)

本文详细介绍了在Ubuntu 22.04上使用open-vm-tools替代VMware Tools实现高效共享文件夹管理的方法。通过开源工具open-vm-tools,用户可避免传统方案的兼容性问题,享受自动适配内核、系统更新同步等优势。文章包含从安装配置到开机自动挂载的全流程指导,特别适合在VMware虚拟机中运行Ubuntu Desktop的开发者提升工作效率。

weixin_32520095的博客 583

别再只用CANape测数据了!手把手教你用ASAP2 Studio编辑A2L文件(附MAP文件更新避坑指南)

本文深入探讨ASAP2 Studio在ECU开发中的高阶应用,特别是如何利用其编辑A2L文件并同步更新MAP文件,提升测量标定效率。文章详细解析了ASAP2 Studio的双向同步能力、MAP文件更新全流程及变量管理技巧,帮助工程师避免常见错误,优化工作流程。

weixin_26833939的博客 506

swt中系统托盘Tray的实现

在做gui界面的时候,系统托盘是屡见不鲜的功能,也是通用的、基础的功能之一,什么叫做系统托盘呢?就是最小化之后在右下角有个小图标可以还原: 这样的效果在swt中是怎么实现的呢?这里需要用到swt中的Tray这个类,Tray翻译过来就是“托盘”的意思。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...

xiaozhuangyumaotao的博客 572

CMOS反相器版图设计全解析:PMOS/NMOS布局与VDD/VSS连接门道

版图设计是芯片从电路原理图迈向物理实现的必经桥梁,而CMOS反相器作为最基础的数字单元,恰好是理解这一过程的最佳切入点。在版图绘制中,PMOS与NMOS因导电类型和迁移率差异,需要在N阱与P衬底上分别规划,并呈现出不同的有源区尺寸。真正决定版图好坏的关键,往往在于VDD/VSS的完整连接——不仅要接通源漏,还要通过阱接触和衬底接触固定阱与衬底电位,防止寄生PN结正偏和闩锁效应。合理布局电源地线轨道、优化接触孔数量,能显著降低寄生电阻与电迁移风险。这些原理不仅适用于反相器,也是所有CMOS数字标准单元版图设计

weixin_29159441的博客 299

SWT进阶版-系统托盘

package demotest; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Shell; import org.ecli.

cnds2016的博客 381

Pi0 项目复现及项目问题解决方案(全网抢先发布~)

Pi0 项目复现及项目问题解决方案(全网抢先发布~)

m0_68167062的博客 2260

YOLOV26详解 从原理到部署

计算机视觉领域最具影响力的目标检测框架迎来重大里程碑。2026年1月,Ultralytics 正式发布 YOLOv26——这不是一次简单的版本迭代,而是一场面向边缘计算时代的架构重构。本专栏基于 Ultralytics 官方技术白皮书、YOLO Vision 2025 大会首发内容及国际前沿研究成果,系统拆解 YOLOv26 从算法原理到工程落地的全栈技术体系。与常规教程不同,我们聚焦与,帮助你在端侧 AI 部署的实战中掌握核心竞争力。

u012133341的博客 2011

java swt最小化到托盘_Java创建系统托盘实现(swt和jdk6分别实现)

由于jdk6之前并不支持所以使用swtjdk6可以支持了 建议使用jdk6的版本 因为它才是真正的跨平台swtJava代码import org.eclipse.swt.*;import org.eclipse.swt.graphics.*;import org.eclipse.swt.layout.FillLayout;import org.eclipse.swt.widgets.*;public...

weixin_42613572的博客 145

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

java swt 设置图标_完美SWT实现任务栏图标(系统托盘),带菜单和ToolTip

/** 春风化雷* 二零零六年四月三十日*/import org.eclipse.swt.SWT;import org.eclipse.swt.events.ShellListener;import org.eclipse.swt.graphics.Image;import org.eclipse.swt.internal.win32.OS;import org.eclipse.swt.widge...

weixin_39606003的博客 486

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SWT实现系统托盘效果

package lpp; import org.eclipse.swt.*; import org.eclipse.swt.graphics.*; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.*; public class TrayBySwt { public static void

顾而乐之 860

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

java swt托盘气泡_SWT实现任务栏图标(系统托盘),带菜单和ToolTip | 学步园

import org.eclipse.swt.SWT;import org.eclipse.swt.events.ShellListener;import org.eclipse.swt.graphics.Image;import org.eclipse.swt.internal.win32.OS;import org.eclipse.swt.widgets.Display;import org....

weixin_42514616的博客 164

swt最小化到系統托盤的實現

 我们有些程序会想要托盘处显示图标,最小化到系统栏;关闭按钮不关闭程序,也是最小化到系统栏;点击托盘图标激活窗口,通过托盘图标的弹出菜单来退出程序。本段代码就是要完成这样的功能,是 SWT  来实现的。直接代码给出,代码中有较详细的注释,说明了本程序的功能及实现。文中的任务栏和系统栏应该知道是指哪一段吧,微软就是这么定义的,用 spyxx 的 findwindow 窥探一下就知道了。

FromBeginBGD的专栏 650

SWT小技巧

SWT的一些小技巧 (一) 多线程访问SWT的控件 SWT中窗口开始show up之后display控件就要开始循环监视events loop了,很多应用程序需要开socket或者使用http协议跟外界通信,收到回复之后再在界面上产生回调行为。而通信逻辑通常封装在另一个线程里,如果直接调用SWT控件会抛出Invalid Thread Access异常,好在SWT提供了多线程访问控件,排队处

Ant Ren的专栏 4361

SWT实现任务栏图标(系统托盘),带菜单和ToolTip

SWT的系统托盘实现

张德中的专栏 3594

SWT学习笔记4——系统托盘 system tray

[img]http://dl.iteye.com/upload/attachment/0065/7557/c1c5cbd7-7ead-3865-933c-519f431d0e46.png[/img] [code="java"] import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Menu; imp...

LC 332
上一篇: 用SWT实现系统托盘
下一篇: java写的MD5算法
techyang
博客等级 码龄22年 12粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值