`
sisi1984117
  • 浏览: 157590 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

【转】闪动托盘

阅读更多
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();  
                }  
            });  
        }  
      
    }  
 
分享到:
评论

相关推荐

    C#实现闪动托盘图标示例

    ### C# 实现闪动托盘图标示例详解 #### 一、背景介绍 在许多应用程序中,如QQ登录过程或Firemail等邮件客户端自动收取邮件时,常常会在任务栏的托盘区域显示一个闪动的图标来提醒用户当前正在进行的操作。这种视觉...

    会闪动的托盘

    "会闪动的托盘"是一个基于MFC(Microsoft Foundation Classes)开发的C++应用程序,主要功能是在系统任务栏的托盘区域创建一个图标,并且能够实现类似QQ消息提示时的闪烁效果。这个程序通常用于在后台运行,不占据主...

    托盘闪动消息提醒(有声音+源码)-JAVA版

    在Java编程环境中,托盘(Tray)闪动消息提醒是一种常见的用户交互方式,它能够以不打扰用户正常工作的方式,向用户传达重要的系统或应用信息。本实例着重讲解如何在JAVA应用程序中实现托盘通知功能,同时伴有声音...

    QQ托盘图标闪动

    【QQ托盘图标闪动】现象通常是由于程序在运行过程中,为了吸引用户注意力或提示有新消息,会不断地改变托盘区域的图标状态。在Windows系统中,这种效果是通过控制托盘图标的显示和更新来实现的。下面将详细解释如何...

    vb.net 托盘图标闪动 代码

    vb.net的托盘图标闪动,适用于程序获取的信息有变动时的通知。 仿QQ来消息时的闪动频率。 希望对初学者有所帮助。

    仿QQ系统托盘闪动

    在IT领域,尤其是在Windows应用程序开发中,"仿QQ系统托盘闪动"是一个常见的需求,主要是为了模拟如QQ这样的即时通讯软件所具有的通知机制。QQ等应用在接收到新消息时,会在任务栏的系统托盘区域进行闪烁,以吸引...

    delphi 实现闪动、动画、托盘的源码

    在Delphi编程环境中,开发人员经常需要实现一些增强用户界面的功能,如窗口闪动、动画效果以及在系统托盘区显示应用程序图标等。这些功能可以让软件更具吸引力,提高用户体验。以下将详细介绍如何在Delphi中实现这些...

    windows托盘冒泡闪动 for PB9

    【标题】"Windows 托盘冒泡闪动 for PB9" 涉及的主要知识点是Windows应用程序开发中的系统托盘图标管理和通知功能,使用的开发工具是PowerBuilder 9(PB9)。PowerBuilder是一款可视化的、面向对象的集成开发环境,...

    Java 实现的qq程序,头像闪动,托盘图标闪动,聊天

    用户上线后自动加载用户信息,用户修改头像后其他用户也会自动加载更新,消息发送过来头像会跳动,当最小化到托盘后,托盘图标也会闪动。用户间可以传递文件,发送消息。服务端可以向每个用户发送消息 可以直接运行...

    C#实现闪动托盘图标效果的方法

    本文实例讲述了C#实现闪动托盘图标效果的方法。分享给大家供大家参考,具体如下: 在用户正在登录QQ或者使用Firemail邮件系统自动收取邮件的时候,托盘图标会闪动提示用户正在运行的任务。 闪动图标可以使用定时切换...

    C#系统托盘图标闪动.rar

    "C#系统托盘图标闪动.rar"的资源包含了实现类似QQ那样具有吸引用户注意力的托盘图标闪烁效果的C#程序源代码。现在,我们将深入探讨如何在C#中创建和控制这种闪动效果。 首先,我们需要引入`System.Windows.Forms`...

    TrayIcon系统图标闪动

    在Windows操作系统中,TrayIcon(系统...综上所述,"TrayIcon系统图标闪动"是一个涉及到桌面应用程序用户界面设计和编程的技术点,主要关注如何在Windows环境中创建、管理和有效地使用系统托盘图标来传递信息给用户。

    c#语言实现托盘图标

    根据给定的信息,本文将详细解析如何在C#中实现托盘图标的闪动效果,类似于QQ等软件中常见的功能。 ### 实现托盘图标闪动的原理 托盘图标通常指的是位于Windows任务栏右下角的一个小区域,用于显示程序状态或提供...

    【源代码】mfc 托盘闪烁及鼠标左右键响应

    本项目“【源代码】mfc 托盘闪烁及鼠标左右键响应”着重展示了如何利用MFC来实现一个具有托盘图标功能的应用,并且该图标能够对鼠标的各种操作做出响应,包括单击、双击和右键点击,以及托盘图标自身的闪烁效果。...

    PB下的系统托盘(系统栏)控件

    标题中的“PB下的系统托盘(系统栏)控件”指的是在PowerBuilder(PB)环境中,用于在操作系统任务栏的系统托盘区域实现功能的组件。这个控件允许开发者在程序运行时在系统托盘区域添加、管理和移除图标,同时能够...

    易语言制作托盘闪动教学

    本文将详细讲解如何使用易语言来制作一个带有托盘闪动功能的应用程序。 首先,我们需要创建一个新的窗口。在易语言中,新建一个窗口意味着创建一个新的程序界面,用户可以看到和交互的部分。这可以通过易语言的集成...

    VC+MFC 托盘图标闪烁与消息提示

    本文将深入探讨如何使用VC+MFC实现托盘图标闪烁、快捷键支持、右键菜单以及消息提示等功能。 首先,托盘图标(Tray Icon)是指在系统任务栏右下角的通知区域显示的小图标,它可以帮助应用程序在后台运行时与用户...

Global site tag (gtag.js) - Google Analytics