站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Java 专题用JDK6做系统托盘

用JDK6做系统托盘

摘要: 用JDK6做系统托盘

</td> </tr> <tr> <td height="35" valign="top" class="ArticleTeitle"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="505" height="86" align="left" valign="top">

SystemTray意为桌面的系统托盘,在Windows下表现为任务状态栏的一个图标,在很多的应用中都有体现,如及时通讯软件(MSN、QQ),监控类软件(杀毒软件)等。

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

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

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

下面是例子程序:

 * A sample application of J2SE 6.0 TrayIocn

 *

 * @author Amooo

 * @version 1.00 06/07/11

 */

import java.awt.AWTException;

import java.awt.Image;

import java.awt.MenuItem;

import java.awt.PopupMenu;

import java.awt.SystemTray;

import java.awt.Toolkit;

import java.awt.TrayIcon;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.WindowConstants;

public class TrayIconAdvanced extends JFrame {

    private TrayIcon ti;

    public static void main(String[] args) {

        TrayIconAdvanced frame = new TrayIconAdvanced();

        frame.setTitle("TrayIconAdvanced");

        frame.setVisible(true);

        frame.setSize(200, 65);

        frame.setLocation(300, 200);

    }

    public TrayIconAdvanced() {

        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("Exit");

        exitButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                System.exit(0);//结束程序

            }

        });

        root.add(exitButton);

        getContentPane().add(root);

        pack();

        initTi();

    }

    private void initTi() {

        Image image = Toolkit.getDefaultToolkit().getImage(

                      this.getClass().getResource("TrayIcon.png"));

        PopupMenu popupTi = new PopupMenu();//弹出菜单

        MenuItem showItem = new MenuItem("Show");//菜单项

        ActionListener showListener = new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                setVisible(true);//重新显示窗口

                SystemTray.getSystemTray().remove(ti);//从系统托盘中移出

            }

        };

        showItem.addActionListener(showListener);

        popupTi.add(showItem);

        ti = new TrayIcon(image, "TrayIcon", popupTi);//图标,标题,右键弹出菜单

        ti.addActionListener(showListener);//增加一个双击事件听众

      

    }

    public void minimizeToTray() {

        SystemTray tray = SystemTray.getSystemTray();

        try {

            tray.add(ti);//在系统托盘区中增加图标

        } catch (AWTException e) {

            System.err.println(e);

        }

    }

}
</td> <td width="179" valign="top"> </td> </tr> </table>

例2:

import java.awt.AWTException;

import java.awt.Image;

import java.awt.MenuItem;

import java.awt.PopupMenu;

import java.awt.SystemTray;

import java.awt.Toolkit;

import java.awt.TrayIcon;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

//import java.net.URL;

//import java.net.URLClassLoader;

import javax.swing.JFrame;

import javax.swing.JLabel;

public class TestSysteTray

{

public static void main(String args[])

      {

             TrayIcon trayIcon = null;

             if (SystemTray.isSupported()) //判断系统是否支持系统托盘

             {

                    SystemTray tray = SystemTray.getSystemTray(); //获取系统托盘

                    Image image = Toolkit.getDefaultToolkit().getImage("TrayIcon.png");//载入图片

                    ActionListener listener = new ActionListener() {

                            public void actionPerformed(ActionEvent e) {                         

                                         //创建一个窗体

                                         JFrame frame = new JFrame();

                                         frame.setBounds(400,400,200,200);

                                         JLabel label =new JLabel("welcome JDK1.6");

                                         frame.add(label);

                                         frame.setVisible(true);                                 

  

                                  }

                      };

       

                //创建托盘图标的右键弹出菜单,open与exit.

                  PopupMenu popup = new PopupMenu();

                  MenuItem defaultItem = new MenuItem("open");

                  defaultItem.addActionListener(listener);

                  MenuItem exitItem = new MenuItem("exit");

                  exitItem.addActionListener(new ActionListener()

                                {

                                         public void actionPerformed(ActionEvent e) {

                                                System.exit(0);                                  

           

                                         }                       

                                });

                  popup.add(defaultItem);

                  popup.add(exitItem);

                  trayIcon = new TrayIcon(image, "My System Tray ", popup);//创建托盘图标        

     

                  trayIcon.addActionListener(listener);//双击托盘图标时打开窗体

                  try {

                           tray.add(trayIcon);//将图标加入到系统托盘区

                    } catch (AWTException e1) {                       

                           e1.printStackTrace();

                    }

             }

      }

}
</td> </tr> <tr>


↑返回目录
前一篇: Java SE 6中的图像转换
后一篇: Java 1.5 Tiger 一个开发者的笔记