【转】闪动托盘

package com.msg;  
      
import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TextArea;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

import org.jvnet.substance.skin.SubstanceBusinessBlueSteelLookAndFeel;
      
      
    /** 
     *  
     * 创建闪动的托盘图像 
     *  
     * 
     */  
    public class BickerTray extends JFrame implements Runnable {  
      
        private static final long serialVersionUID = -3115128552716619277L;  
      
        private SystemTray sysTray;// 当前操作系统的托盘对象  
        private TrayIcon trayIcon;// 当前对象的托盘  
      
        private ImageIcon icon = null;  
        private TextArea ta = null;  
          
        private static int count = 1; //记录消息闪动的次数  
        private boolean flag = false; //是否有新消息  
        private static int times = 1; //接收消息次数  
      
        public BickerTray() {  
            this.createTrayIcon();// 创建托盘对象  
            Image image = this.getToolkit().getImage(getRes("com/img/f32.gif"));  
            this.setIconImage(image);  
            init();  
        }  
      
        public URL getRes(String str){  
             return this.getClass().getClassLoader().getResource(str);  
        }  
          
        /** 
         * 初始化窗体的方法 
         */  
        public void init() {  
            this.setTitle("消息盒子");  
            ta = new TextArea("");  
            ta.setEditable(false);  
            this.add(ta);  
            this.setSize(400, 400);  
            //this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
            this.setLocationRelativeTo(null);  
            // 添加窗口最小化事件,将托盘添加到操作系统的托盘  
            /*this.addWindowListener(new WindowAdapter() { 
                public void windowIconified(WindowEvent e) { 
                    addTrayIcon(); 
                } 
            });*/  
            addTrayIcon();  
            this.setVisible(true);  
        }  
      
        /** 
         * 添加托盘的方法 
         */  
        public void addTrayIcon() {  
            try {  
                sysTray.add(trayIcon);// 将托盘添加到操作系统的托盘  
                setVisible(false);    // 使得当前的窗口隐藏  
                new Thread(this).start();  
            } catch (AWTException e1) {  
                e1.printStackTrace();  
            }  
        }  
      
        /** 
         * 创建系统托盘的对象 步骤:  
         * 1,获得当前操作系统的托盘对象  
         * 2,创建弹出菜单popupMenu  
         * 3,创建托盘图标icon 
         * 4,创建系统的托盘对象trayIcon 
         */  
        public void createTrayIcon() {  
            sysTray = SystemTray.getSystemTray();// 获得当前操作系统的托盘对象  
            icon = new ImageIcon(getRes("com/img/f17.gif"));// 托盘图标  
            PopupMenu popupMenu = new PopupMenu();// 弹出菜单  
            MenuItem mi = new MenuItem("打开");  
            MenuItem exit = new MenuItem("退出");  
            popupMenu.add(mi);  
            popupMenu.add(exit);  
            // 为弹出菜单项添加事件  
            mi.addActionListener(new ActionListener() {  
                public void actionPerformed(ActionEvent e) {  
                    ta.setText(ta.getText()+"\n==============================================\n 《通知》 尚有3个移库任务未完成。 \n 第"+times+"次接收时间:"+ new Date().toLocaleString()); // 设置通知消息内容  
                    BickerTray.this.setExtendedState(JFrame.NORMAL);  
                    BickerTray.this.setVisible(true); // 显示窗口  
                    BickerTray.this.toFront(); //显示窗口到最前端  
                    flag = false;  //消息打开了  
                    count = 0; times++;  
                }  
            });  
            exit.addActionListener(new ActionListener() {  
                public void actionPerformed(ActionEvent e) {  
                    System.exit(0);  
                }  
            });  
            trayIcon = new TrayIcon(icon.getImage(), "消息盒子", popupMenu);  
            /** 添加鼠标监听器,当鼠标在托盘图标上双击时,默认显示窗口 */  
            trayIcon.addMouseListener(new MouseAdapter() {  
                public void mouseClicked(MouseEvent e) {  
                    if (e.getClickCount() == 2) { // 鼠标双击  
                        ta.setText(ta.getText()+"\n==============================================\n 《通知》 尚有3个移库任务未完成。 \n 第"+times+"次接收时间:"+ new Date().toLocaleString()); // 设置通知消息内容  
                        BickerTray.this.setExtendedState(JFrame.NORMAL);  
                        BickerTray.this.setVisible(true); // 显示窗口  
                        BickerTray.this.toFront();  
                        flag = false;  //消息打开了  
                        count = 0; times++;  
                    }  
                }  
            });  
        }  
      
        /** 
         * 线程控制闪动  
         */  
        public void run() {  
            while (true) {  
                if(flag){ // 有新消息  
                    try {  
                        if(count == 1){  
                            // 播放消息提示音  
                            //AudioPlayer p = new AudioPlayer(getRes("file:com/sound/Msg.wav"));  
                            //p.play(); p.stop();  
                            try {  
                                AudioClip p = Applet.newAudioClip(new URL("file:sound/msg.wav"));  
                                p.play();  
                            } catch (MalformedURLException e) {  
                                e.printStackTrace();  
                            }  
                        }  
                        // 闪动消息的空白时间  
                        this.trayIcon.setImage(new ImageIcon("").getImage());  
                        Thread.sleep(500);  
                        // 闪动消息的提示图片  
                        this.trayIcon.setImage(icon.getImage());  
                        Thread.sleep(500);  
                    } catch (Exception e) {  
                        e.printStackTrace();  
                    }  
                    count++;  
                }else{ // 无消息或是消息已经打开过  
                    this.trayIcon.setImage(icon.getImage());  
                    try {  
                        Thread.sleep(20000);  
                        flag = true;  
                    } catch (InterruptedException e) {  
                        e.printStackTrace();  
                    }  
                }  
            }  
        }  
      
        /** 
         * @param args 
         */  
        public static void main(String[] args) {  
            JFrame.setDefaultLookAndFeelDecorated(true);  
            try {  
                UIManager.setLookAndFeel(new SubstanceBusinessBlueSteelLookAndFeel());  
            } catch (UnsupportedLookAndFeelException e) {  
                e.printStackTrace();  
            }  
      
            SwingUtilities.invokeLater(new Runnable() {  
                public void run() {  
                    new BickerTray();  
                }  
            });  
        }  
      
    }  
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值