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入门到精通教程
查看: 377|回复: 0

[Java基础知识]用JDK6做系统托盘

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

    [LV.1]初来乍到

    发表于 2014-10-2 10:36:15 | 显示全部楼层 |阅读模式
    SystemTray意为桌面的系统托盘,在Windows下表现为任务状态栏的一个图标,在很多的应用中都有体现,如及时通讯软件(MSN、QQ),监控类软件(杀毒软件)等。
       
         
             在java 6的java.awt包下提供了SystemTray和TrayIcon类,这两个类可以实现系统托盘功能,下面让我们看看如何去实现系统托盘。实现的流程:捕获关闭窗口事件、隐藏窗口、显示托盘图标,鼠标右击托盘图标、显示弹出菜单(自动)、选择菜单的显示窗口项,再显示窗口、隐藏托盘图标。       先了解一下SystemTray和TrayIcon这两个类。每一个Java应用都会包含一个SystemTray实例,这个不需要你去实例化,你可以通过SystemTray.getSystemTray()获取,但是不是所有的系统和平台支持系统托盘的,因此我们必须先判断系统是否支持系统托盘,检测是否支持托盘的方法是 isSupported() 。        接下来我们就要在SystemTray中添加TrayIcon,这样在托盘区就会显示一个新的托盘图标。TrayIcon有四部分组成:名称、图标、弹出菜单和事件,所以我们将这四方面做好就可以完成其既定的功能。
      
         
          
          
            
          

          
          
         
          
    下面是例子程序:
    1. * A sample application of J2SE 6.0 TrayIocn
    2. *
    3. * @author Amooo
    4. * @version 1.00 06/07/11
    5. */
    6. import java.awt.AWTException;
    7. import java.awt.Image;
    8. import java.awt.MenuItem;
    9. import java.awt.PopupMenu;
    10. import java.awt.SystemTray;
    11. import java.awt.Toolkit;
    12. import java.awt.TrayIcon;
    13. import java.awt.event.ActionEvent;
    14. import java.awt.event.ActionListener;
    15. import java.awt.event.WindowAdapter;
    16. import java.awt.event.WindowEvent;
    17. import javax.swing.JButton;
    18. import javax.swing.JFrame;
    19. import javax.swing.JPanel;
    20. import javax.swing.WindowConstants;
    21. public class TrayIconAdvanced extends JFrame {
    22.     private TrayIcon ti;
    23.     public static void main(String[] args) {
    24.         TrayIconAdvanced frame = new TrayIconAdvanced();
    25.         frame.setTitle("TrayIconAdvanced");
    26.         frame.setVisible(true);
    27.         frame.setSize(200, 65);
    28.         frame.setLocation(300, 200);
    29.     }
    30.     public TrayIconAdvanced() {
    31.         setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
    32.         this.addWindowListener(new WindowAdapter() {
    33.             public void windowClosing(WindowEvent e) {
    34.                 if (SystemTray.isSupported()) {
    35.                     setVisible(false);//隐藏窗口
    36.                     minimizeToTray();//如果系统支持托盘图标,将窗口放入系统托盘区
    37.                 } else {
    38.                     System.exit(0);//否则结束程序
    39.                 }
    40.             }
    41.         });
    42.         JPanel root = new JPanel();
    43.         JButton exitButton = new JButton("Exit");
    44.         exitButton.addActionListener(new ActionListener() {
    45.             public void actionPerformed(ActionEvent e) {
    46.                 System.exit(0);//结束程序
    47.             }
    48.         });
    49.         root.add(exitButton);
    50.         getContentPane().add(root);
    51.         pack();
    52.         initTi();
    53.     }
    54.     private void initTi() {
    55.         Image image = Toolkit.getDefaultToolkit().getImage(
    56.                       this.getClass().getResource("TrayIcon.png"));
    57.         PopupMenu popupTi = new PopupMenu();//弹出菜单
    58.         MenuItem showItem = new MenuItem("Show");//菜单项
    59.         ActionListener showListener = new ActionListener() {
    60.             public void actionPerformed(ActionEvent e) {
    61.                 setVisible(true);//重新显示窗口
    62.                 SystemTray.getSystemTray().remove(ti);//从系统托盘中移出
    63.             }
    64.         };
    65.         showItem.addActionListener(showListener);
    66.         popupTi.add(showItem);
    67.         ti = new TrayIcon(image, "TrayIcon", popupTi);//图标,标题,右键弹出菜单
    68.         ti.addActionListener(showListener);//增加一个双击事件听众
    69.       
    70.     }
    71.     public void minimizeToTray() {
    72.         SystemTray tray = SystemTray.getSystemTray();
    73.         try {
    74.             tray.add(ti);//在系统托盘区中增加图标
    75.         } catch (AWTException e) {
    76.             System.err.println(e);
    77.         }
    78.     }
    79. }
    复制代码

      

    1. 例2:
    2. import java.awt.AWTException;
    3. import java.awt.Image;
    4. import java.awt.MenuItem;
    5. import java.awt.PopupMenu;
    6. import java.awt.SystemTray;
    7. import java.awt.Toolkit;
    8. import java.awt.TrayIcon;
    9. import java.awt.event.ActionEvent;
    10. import java.awt.event.ActionListener;
    11. //import java.net.URL;
    12. //import java.net.URLClassLoader;

    13. import javax.swing.JFrame;
    14. import javax.swing.JLabel;
    15. public class TestSysteTray
    16. {
    17. public static void main(String args[])
    18.       {
    19.              TrayIcon trayIcon = null;
    20.              if (SystemTray.isSupported()) //判断系统是否支持系统托盘
    21.              {
    22.                     SystemTray tray = SystemTray.getSystemTray(); //获取系统托盘
    23.                     Image image = Toolkit.getDefaultToolkit().getImage("TrayIcon.png");//载入图片
    24.                     ActionListener listener = new ActionListener() {
    25.                             public void actionPerformed(ActionEvent e) {                          

    26.                                          //创建一个窗体
    27.                                          JFrame frame = new JFrame();
    28.                                          frame.setBounds(400,400,200,200);
    29.                                          JLabel label =new JLabel("welcome JDK1.6");
    30.                                          frame.add(label);
    31.                                          frame.setVisible(true);                                 
    32.    
    33.                                   }
    34.                       };
    35.         
    36.                 //创建托盘图标的右键弹出菜单,open与exit.
    37.                   PopupMenu popup = new PopupMenu();
    38.                   MenuItem defaultItem = new MenuItem("open");
    39.                   defaultItem.addActionListener(listener);
    40.                   MenuItem exitItem = new MenuItem("exit");
    41.                   exitItem.addActionListener(new ActionListener()
    42.                                 {
    43.                                          public void actionPerformed(ActionEvent e) {
    44.                                                 System.exit(0);                                   
    45.             
    46.                                          }                        
    47.                                 });
    48.                   popup.add(defaultItem);
    49.                   popup.add(exitItem);
    50.                   trayIcon = new TrayIcon(image, "My System Tray ", popup);//创建托盘图标         
    51.       
    52.                   trayIcon.addActionListener(listener);//双击托盘图标时打开窗体
    53.                   try {
    54.                            tray.add(trayIcon);//将图标加入到系统托盘区
    55.                     } catch (AWTException e1) {                        
    56.                            e1.printStackTrace();
    57.                     }
    58.              }
    59.       }
    60. }
    复制代码


      
      
       
       

         
       

         
       
      



    源码下载:http://file.javaxxz.com/2014/10/2/103614406.zip
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-2-26 21:58 , Processed in 0.395506 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

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