在做gui界面的时候,系统托盘是屡见不鲜的功能,也是通用的、基础的功能之一,什么叫做系统托盘呢?就是最小化之后在右下角有个小图标可以还原:

这样的效果在swt中是怎么实现的呢?这里需要用到swt中的Tray这个类,Tray翻译过来就是“托盘”的意思。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

@Test

    public void testTray(){

        Display display=new Display();

        Shell topShell=new Shell(display);

        

        Tray tray=display.getSystemTray();

        if (tray==null) {

            System.out.println("不支持");

            return;

        }

        //设置系统托盘的工作项,显示在右下角的东西

        TrayItem trayItem=new TrayItem(tray, SWT.NONE);

        

        //可以带“/”,表示从类的根路径,否则从相应的.class文件开始

//      MenuDemo.class.getResourceAsStream("");

        //总是从类的根路径

//      MenuDemo.class.getClassLoader().getResourceAsStream("");

        

//      trayItem.setImage(display.getSystemImage(id))

        //设置工作项的图标,否则不显示

        trayItem.setImage(new Image(display, this.getClass().getResourceAsStream("tray.gif")));

        

        final Menu menu=new Menu(topShell,SWT.POP_UP);

        MenuItem a=new MenuItem(menu, SWT.PUSH);

        a.setText("在线更新");

        MenuItem b=new MenuItem(menu, SWT.PUSH);

        b.setText("关于我们");

        menu.setDefaultItem(a);//颜色更黑

        

        

        Listener listener=new Listener() {

            @Override

            public void handleEvent(Event event) {

                if (event.type==SWT.DefaultSelection) {

                    System.out.println("双击");

                    menu.setVisible(true);

                }else if (event.type==SWT.MenuDetect) {

                    System.out.println("MenuDetect");

                    menu.setVisible(true);

                }else if (event.type==SWT.Show) {

                    System.out.println("显示托盘项");

                }else if (event.type==SWT.Selection) {//单击

                    System.out.println("单击托盘项");

                }else if (event.type==SWT.Hide) {

                    System.out.println("隐藏托盘项");

                }

            }

        };

        //给工作项设置监听

        trayItem.addListener(SWT.DefaultSelection, listener);//双击托盘项

        trayItem.addListener(SWT.MenuDetect, listener);//右击托盘项

        trayItem.addListener(SWT.Show, listener);

        trayItem.addListener(SWT.Selection, listener);

        trayItem.addListener(SWT.Hide, listener);

        

        topShell.pack();

        topShell.open();

        while(!topShell.isDisposed()){

            if (!display.readAndDispatch()) {

                display.sleep();

            }

        }

        display.dispose();

    }

swt中系统托盘Tray的实现相关推荐

  1. windows系统托盘tray

    electron tray是一种方法. Add icons and context menus to the system's notification area. python调用win32api也 ...

  2. java中系统托盘的实现

    很明显,JAVA中的系统托盘,如果要实现,重要的是两个类,一个是SystemTray,而另一个是TrayIcon.需要为TrayIcon设置好图片,它需要显示的信息以及右键点击的PopupMenu.P ...

  3. popupmenu java_Java基于JPopupMenu实现系统托盘的弹出菜单,解决PopupMenu弹出菜单中文乱码...

    本人萌新,利用业余时间学习Java.最近在写一个GUI程序的时候遇到一个问题,系统托盘创建弹出菜单中文乱码,网上搜索很多内容都没有找到解决方案,现将个人解决方案分享给大家,希望有所帮助 一.Popup ...

  4. Electron系统托盘

    系统托盘 Tray 文章目录 系统托盘 Tray 1. 主进程 2. 实现效果 1. 主进程 代码如下(示例): const{ app, BrowserWindow,Tray, Menu } requ ...

  5. 将Windows Live Mail最小化到Windows 7中的系统托盘

    Are you frustrated that you can not minimize Windows Live Mail to the system tray in Windows 7? With ...

  6. 【electron】electron-builder-start 实现系统托盘(tray)

    练习代码git:https://github.com/SmileEricXin/electronPractice.git //src\main\index.js 做以下修改// 新增调用 import ...

  7. 在 Ubuntu Natty 中解除系统托盘限制

    在 Ubuntu 11.04 Natty 中,Ubuntu 对顶部面板右上角的通知区域(系统托盘)采用了白名单制度,只有支持 Indicators 并位于白名单的部分程序才会被显示在系统托盘中,目前支 ...

  8. linux怎么卸载evolution,linux - 如何在Ubuntu的系统托盘中最小化Evolution? - Ubuntu问答...

    问题描述 在Ubuntu中,可以将某些应用程序设置为最小化,而不是关闭时退出.例如,当在应用程序窗口中按下关闭按钮时,"移情"会最小化到系统托盘(邮件图标).我如何使Evoluti ...

  9. PS Tray Factory win7 系统托盘 软件用法

    PS Tray Factory 软件网址: http://www.pssoftlab.com/hide_system_tray_icons.phtml 这个软件是作用是可以 通过 Ctrl +ALT ...

最新文章

  1. Tensorflow Lite之编译生成tflite文件
  2. usb连接不上 艾德克斯电源_艾德克斯HT3150联机和IT6720校准联机记
  3. sass webpack_如何在Visual Studio和Webpack中编译Sass文件
  4. Dockerfile中CMD和ENTRYPOINT的区别
  5. 基于python的测试报告自动化生成
  6. C#调用open cv函数
  7. paip. 定时 关机 休眠 的总结
  8. 不确定中找到确定性, IBM开出哪些疫后企业数字化新处方?
  9. 单片机三角波c语言程序,基于51单片机的三角波发生器
  10. Oracle TFA日志收集工具简介
  11. 如何提高自身跟团队的领导力?
  12. 一起学英语第二季第五期
  13. 判断一个字符数据是否是数字字符
  14. 联想笔记本怎么进入pe系统_图解联想G40-30(N2840)笔记本是怎么进入pe设置U盘启动的...
  15. configure: error: no acceptable C compiler found in $PATH 问题解决
  16. 【Python】QQ群聊天记录提取
  17. java上机实验作业 编写汽车类car_请问如何用Java编写一个汽车类Car
  18. 【CDT扩展】定制Debug视图
  19. 让动物保育理念能更贴近民众 街景服务与胜博发公益结合迈进大象保护区
  20. 减速器性能测试软件,减速机性能测试台

热门文章

  1. 关于使用IE浏览特制网页时允许远程执行代码漏洞(MS10-018)的复现
  2. Odoo与浪潮合资研发PS Cloud之退货对平均价格估值的影响
  3. 嵌入式QT开发复习笔记
  4. python基础教程书在线阅读_《Python基础教程》Magnus Lie Hetland著【摘要 书评 在线阅读】-苏宁易购图书...
  5. spring-cloud
  6. 破解iEnglish
  7. 因果图+判定表法+场景法分析
  8. 精诚团结续写传说武汉新员工培训美团站长推荐这几家路线
  9. linux安装kde桌面环境,Arch Linux桌面环境(KDE Plasma)安装教程
  10. 边缘检测(Edge Detection)和极值点检测(Blod Detection)相关知识