webker 发表于 2015-5-30 15:49:16

实现简单系统托盘

本帖最后由 xiaoye 于 2015-10-9 17:38 编辑

SystemTray 类表示桌面的系统托盘。
在某些平台上,可能不存在或不支持系统托盘,在这种情况下,getSystemTray() 将抛出 UnsupportedOperationException。所以检查系统托盘是否受支持,使用 isSupported()。
SystemTray 可以包含一个或多个 TrayIcon,可以使用 add(java.awt.TrayIcon) 方法将它们添加到托盘,当不再需要托盘时,使用 remove(java.awt.TrayIcon) 移除它。TrayIcon 由图像、弹出菜单和一组相关侦听器组成。
每个 Java 应用程序都有一个 SystemTray 实例,在应用程序运行时,它允许应用程序与桌面系统托盘建立连接。SystemTray 实例可以通过 getSystemTray() 方法获得。应用程序不能创建自己的 SystemTray 实例。

首先将主界面弄出来。

import javax.swing.JFrame;

public class Test1 extends JFrame{
       
        public Test1(){
                setSize(300, 300);
                setVisible(true);
               
        }
       
        public static void main(String[] args) {
                new Test1();
        }

}

接下来编写一个初始化系统托盘的方法。
private void SystemTrayInit(){
                if(!SystemTray.isSupported()){//判断该系统是否支持系统托盘,如果不支持则结束方法运行。
                        return;
                }
                String title="提示文本标题";
                String company="提示文本";
                SystemTray sys=SystemTray.getSystemTray();//获取系统托盘实例
                tr=new TrayIcon(Toolkit.getDefaultToolkit().createImage("images/icon.jpg"),title+"\n"+company,createMenu());
                tr.setImageAutoSize(true);
                tr.addActionListener(new SysTrayActionListener());添加动作监听
                try {
                        sys.add(tr);//将TrayIcon添加到托盘
                        tr.displayMessage(title, company, MessageType.INFO);
                } catch (AWTException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }

TrayIcon 对象表示可以添加到系统托盘的托盘图标。TrayIcon 可以包含工具提示(文本)、图像、弹出菜单和一组与之关联的侦听器。
TrayIcon(Image image, String tooltip, PopupMenu popup)
          创建带指定图像、工具提示和弹出菜单的 TrayIcon
Toolkit.getDefaultToolkit().createImage("images/icon.jpg")返回一个Image实列。

接下来是弹出菜单createMenu()
private PopupMenu createMenu() { // 创建系统栏菜单的方法
                PopupMenu menu = new PopupMenu();
                MenuItem exitItem = new MenuItem("退出");
                exitItem.addActionListener(new ActionListener() { // 系统栏退出事件
                                        public void actionPerformed(ActionEvent e) {
                                                System.exit(0);
                                        }
                                });
                MenuItem openItem = new MenuItem("打开");
                openItem.addActionListener(new ActionListener() {// 系统栏打开菜单项事件
                                        public void actionPerformed(ActionEvent e) {
                                                if (!isVisible()) {
                                                        setVisible(true);
                                                        toFront();
                                                } else
                                                        toFront();
                                        }
                                });
               
                menu.add(publicItem);
                menu.add(openItem);
                menu.addSeparator();
                menu.add(exitItem);
                return menu;
        }

系统栏双击事件
class SysTrayActionListener implements ActionListener {// 系统栏双击事件
                public void actionPerformed(ActionEvent e) {
                        setVisible(true);
                        toFront();
                }
        }


最终代码:
import java.awt.AWTException;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.TrayIcon.MessageType;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JFrame;
public class Test extends JFrame implements WindowListener{
        TrayIcon tr;
        public Test(){
                setSize(300, 400);
                addWindowListener(this);
                setVisible(true);
                SystemTrayInit();
//                setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        }
        private void SystemTrayInit(){
                if(!SystemTray.isSupported()){
                        return;
                }
                String title="提示文本标题";
                String company="提示文本";
                SystemTray sys=SystemTray.getSystemTray();
                tr=new TrayIcon(Toolkit.getDefaultToolkit().createImage("images/icon.jpg"),title+"\n"+company,createMenu());
                tr.setImageAutoSize(true);
                tr.addActionListener(new SysTrayActionListener());
                try {
                        sys.add(tr);
                        tr.displayMessage(title, company, MessageType.INFO);
                } catch (AWTException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }
        private PopupMenu createMenu() {
                // TODO Auto-generated method stub
                PopupMenu menu = new PopupMenu();
                MenuItem exitItem = new MenuItem("退出");
                exitItem.addActionListener(new ActionListener() { // 系统栏退出事件
                                        public void actionPerformed(ActionEvent e) {
                                                System.exit(0);
                                        }
                                });
                MenuItem openItem = new MenuItem("打开");
                openItem.addActionListener(new ActionListener() {// 系统栏打开菜单项事件
                                        public void actionPerformed(ActionEvent e) {
                                                if (!isVisible()) {
                                                        setVisible(true);
                                                        toFront();
                                                } else
                                                        toFront();
                                        }
                                });
               
                menu.add(openItem);
                menu.addSeparator();
                menu.add(exitItem);
                return menu;
        }
       
        class SysTrayActionListener implements ActionListener {// 系统栏双击事件
                public void actionPerformed(ActionEvent e) {
                        setVisible(true);
                        toFront();
                }
        }
        public static void main(String[] args) {
                new Test();
               
        }
        @Override
        public void windowOpened(WindowEvent e) {
                // TODO Auto-generated method stub
               
        }
        @Override
        public void windowClosing(WindowEvent e) {
                // TODO Auto-generated method stub
                setVisible(false);
        }
        @Override
        public void windowClosed(WindowEvent e) {
                // TODO Auto-generated method stub
        }
        @Override
        public void windowIconified(WindowEvent e) {
                // TODO Auto-generated method stub
               
        }
        @Override
        public void windowDeiconified(WindowEvent e) {
                // TODO Auto-generated method stub
               
        }
        @Override
        public void windowActivated(WindowEvent e) {
                // TODO Auto-generated method stub
               
        }
        @Override
        public void windowDeactivated(WindowEvent e) {
                // TODO Auto-generated method stub
               
        }

}

ruguoruo 发表于 2015-6-26 20:52:48

H.U.C-麦麦 发表于 2015-6-27 05:07:08

感谢楼主的分享~

CHRIS 发表于 2015-6-27 05:38:06

Lucifer 发表于 2015-6-27 09:44:40

感谢楼主的分享~

小路 发表于 2015-6-27 16:27:10

学习学习技术,加油!

CHRIS 发表于 2015-6-29 16:30:35

感谢楼主的分享~

admin1964 发表于 2015-7-1 10:33:26

wilist 发表于 2015-7-1 17:05:11

支持中国红客联盟(ihonker.org)

H.U.C—Prince 发表于 2015-7-2 11:01:53

支持,看起来不错呢!
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 实现简单系统托盘