SystemTray类

SystemTray意为桌面的系统托盘,在Windows下表现为任务状态栏的一个图标,在很多的应用中都有体现,如及时通讯软件(MSN、QQ),监控类软件(杀毒软件)等。 
在 Java 6的java.awt包下提供了SystemTray和TrayIcon类,这两个类可以实现系统托盘功能,下面让我们看看如何去实现系统托盘。实现的流 程:捕获关闭窗口事件、隐藏窗口、显示托盘图标,鼠标右击托盘图标、显示弹出菜单(自动)、选择菜单的显示窗口项,再显示窗口、隐藏托盘图标。

先 了解一下SystemTray和TrayIcon这两个类。每一个Java应用都会包含一个SystemTray实例,这个不需要你去实例化,你可以通过 SystemTray.getSystemTray()获取,但是不是所有的系统和平台支持系统托盘的,因此我们必须先判断系统是否支持系统托盘,检测是 否支持托盘的方法是 isSupported() 。

接下来我们就要在SystemTray中添加TrayIcon,这样在托盘区就会显示一个新的托盘图标。TrayIcon有四部分组成:名称、图标、弹出菜单和事件,所以我们将这四方面做好就可以完成其既定的功能。

 

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

 

  
  
  
  
  1. /* 
  2.  * To change this template, choose Tools | Templates 
  3.  * and open the template in the editor. 
  4.  */ 
  5.  
  6. package Frame; 
  7.  
  8. /** 
  9.  * 
  10.  * @author max 
  11.  */ 
  12. import java.awt.AWTException; 
  13. import java.awt.Image; 
  14. import java.awt.MenuItem; 
  15. import java.awt.PopupMenu; 
  16. import java.awt.SystemTray; 
  17. import java.awt.Toolkit; 
  18. import java.awt.TrayIcon; 
  19. import java.awt.event.ActionEvent; 
  20. import java.awt.event.ActionListener; 
  21. //import java.net.URL; 
  22. //import java.net.URLClassLoader; 
  23.  
  24. import javax.swing.JFrame; 
  25. import javax.swing.JLabel; 
  26. public class TestSystemTray 
  27.     public static void main(String args[]) 
  28.     { 
  29.         TrayIcon trayIcon = null
  30.         if (SystemTray.isSupported()) //判断系统是否支持系统托盘 
  31.         { 
  32.             SystemTray tray = SystemTray.getSystemTray(); //获取系统托盘 
  33.             Image image = Toolkit.getDefaultToolkit().getImage("TrayIcon.gif");//载入图片 
  34.             ActionListener listener = new ActionListener() { 
  35.                 public void actionPerformed(ActionEvent e) { 
  36.  
  37.                     //创建一个窗体 
  38.                     JFrame frame = new JFrame(); 
  39.                     frame.setBounds(400,400,200,200); 
  40.                     JLabel label =new JLabel("welcome JDK1.6"); 
  41.                     frame.add(label); 
  42.                     frame.setVisible(true); 
  43.  
  44.                 } 
  45.             }; 
  46.  
  47.         //创建托盘图标的右键弹出菜单,open与exit. 
  48.         PopupMenu popup = new PopupMenu(); 
  49.         MenuItem defaultItem = new MenuItem("open"); 
  50.         defaultItem.addActionListener(listener); 
  51.         MenuItem exitItem = new MenuItem("exit"); 
  52.         exitItem.addActionListener(new ActionListener() 
  53.             { 
  54.                 public void actionPerformed(ActionEvent e) { 
  55.                 System.exit(0); 
  56.  
  57.             } 
  58.         }); 
  59.         popup.add(defaultItem); 
  60.         popup.add(exitItem); 
  61.         trayIcon = new TrayIcon(image, "My System Tray ", popup);//创建托盘图标 
  62.  
  63.         trayIcon.addActionListener(listener);//双击托盘图标时打开窗体 
  64.  
  65.         try { 
  66.             tray.add(trayIcon);//将图标加入到系统托盘区 
  67.         } catch (AWTException e1) { 
  68.             e1.printStackTrace(); 
  69.         } 
  70.         } 
  71.     } 

 

你可能感兴趣的:(SystemTray)