Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 376|回复: 0

[Java基础知识]J2SE6_0抢先体验---系统托盘

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-1 19:05:48 | 显示全部楼层 |阅读模式
    下面介绍以下J2SE6.0 新特性
       

       
         在java 6的java.swt包下提供了SystemTray和TrayIcon类,这两个类可以实现系统托盘功能,下面让我们看看如何去实现系统托盘。这是我们要实现的流程:捕获关闭窗口事件、隐藏窗口、显示托盘图标,鼠标右击托盘图标、显示弹出菜单(自动)、选择菜单的显示窗口项,再显示窗口、隐藏托盘图标。
       

       
          在进行编码之前让我再了解一下SystemTray和TrayIcon这两个类。每一个Java应用都会包含一个SystemTray实例,这个不需要你去实例化,你可以通过SystemTray.getSystemTray()获取,接下来我们就要在SystemTray中添加TrayIcon,这样在托盘区就会显示一个新的托盘图标。TrayIcon有四部分组成:名称、图标、弹出菜单和事件,所以我们将这四方面做好就可以完成其既定的功能。
       

       
         下面我们建立一个JFrame的应用,这个应用包含一个TrayIcon对象,当主窗口被关闭时就显示该托盘图标,当点击托盘图标时再显示程序主窗口。
       
      
      
      
       
      
    public class MyFrame extends JFrame {
        private TrayIcon trayIcon;

        public MyFrame() {
           setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
           this.addWindowListener(new WindowAdapter() {
              public void windowClosing(WindowEvent e) {
                 if (SystemTray.isSupported()) {
                    setVisible(false);
                    minimizeToTray();
                 } else {
                    System.exit(0);
                }
            }
         });
         JPanel root = new JPanel();
         JButton exitButton = new JButton("ok");
         exitButton.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent e) {
               System.exit(0);
           }
        });
        root.add(exitButton);
        getContentPane().add(root);
        pack();

        initTrayIcon();
      }

        public void minimizeToTray() {
          SystemTray tray = SystemTray.getSystemTray();
          tray.add(trayIcon);
        }

        private void initTrayIcon() {
         Image image = Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("/logo.png"));
         PopupMenu popup = new PopupMenu();
         MenuItem exitItem = new MenuItem("Show");
         ActionListener showListener = new ActionListener() {
            public void actionPerformed(ActionEvent e) {
               setVisible(true);
               SystemTray.getSystemTray().remove(trayIcon);
           }
         };
          exitItem.addActionListener(showListener);
          popup.add(exitItem);
          trayIcon = new TrayIcon(image, "MyTray", popup);
          trayIcon.addActionListener(showListener);
         }

         public static void main(String[] args) {
            MyFrame frame = new MyFrame();
            frame.setTitle("MyFrame");
            frame.setVisible(true);
         }
    }

         在initTrayIcon()方法中,我们创建一个TrayIcon,提供文本,图标和一个弹出菜单,同时监听默认事件(Windows下双击托盘图标会触发这个事件)。

         在窗口关闭的事件处理方法中,我们隐藏主窗口,然后在SystemTray中添加trayIcon对象。在响应显示主窗口的事件中,我们调用主窗口的显示方法,然后将trayIcon从SystemTray中移去,这样我们就实现了一个最简单的系统托盘的例子。

    在JavaLobby上看到一个JTaskPaneGroup例子,利用TaskPane扩充SystemTray的一些界面效果非常不错的。
      

      
      
       
       

         
       

         
       
      
      
      

      










    源码下载:http://www.hnzz3z.com:8103/zz3zcwb/cwb/dir2/no
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-16 16:42 , Processed in 0.376683 second(s), 48 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表