`

Java系统托盘的应用

    博客分类:
  • Java
阅读更多
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.awt.event.WindowAdapter;   
import java.awt.event.WindowEvent;   
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;   
  
  
/**  
 *   
 * 创建闪动的托盘图像  
 * @author Everest  
 *  
 */  
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 《通知》 今天下午4:00到大礼堂开会。 \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 《通知》 今天下午4:00到大礼堂开会。 \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();   
            }   
        });   
    }   
  
}  
分享到:
评论

相关推荐

    java程序实现系统托盘功能

    java应用程序实现系统托盘功能,可以像QQ一样后台挂载运行

    JAVA+SQL电子通讯录带系统托盘

    在系统托盘中最小化应用程序 支持多用户登录 该系统的后端使用SQL数据库来存储联系人信息,并使用Java JDBC API来连接和操作数据库。前端使用Swing GUI框架来构建用户界面,并使用Java的事件处理机制来处理用户交互...

    JAVA+SQL电子通讯录带系统托盘(论文+源代码)

    《电子通讯录带系统托盘》介绍了一款基于Java语言开发的电子通讯录系统,旨在提供...《JAVA001电子通讯录(带系统托盘)》为提升联系人管理效率和用户体验提供了实用性解决方案,对相关领域的研究和应用具有重要意义。

    Java毕业设计-JAVA+SQL电子通讯录带系统托盘(论文+源代码).rar

    **Java毕业设计:基于JAVA+SQL的电子通讯录系统(含系统托盘功能)** 本资源提供了一个全面的Java毕业设计项目,涵盖了从需求分析、系统设计到编码实现和测试的完整过程。项目的主要目标是开发一个功能完善、操作...

    毕业设计JAVA+SQL电子通讯录带系统托盘(论文+源代码)

    系统托盘功能:特别设计系统托盘功能,使应用能够在后台运行,便于用户随时访问和管理其通讯录信息。 用户友好的界面:强调用户界面设计的重要性,确保应用不仅功能强大,而且操作简便,界面美观。 安全性考虑:...

    【数据库实战】JAVA+SQL电子通讯录带系统托盘【源码+lw+部署文档+讲解】

    内容概要:这个数据库实战项目是基于Java和SQL的电子通讯录系统,带有系统托盘功能,旨在帮助用户高效管理和查找联系人信息。系统包括联系人管理、分组管理、搜索功能、系统托盘快捷操作等模块。前端使用Java Swing...

    基于java开发之系统托盘的应用

    本篇文章介绍了,基于java开发之系统托盘的应用。需要的朋友参考下

    基于JAVA+SQL实现电子通讯录带系统托盘文档+源代码

    Java的跨平台特性使得Java程序可以在任何支持Java虚拟机的操作系统上运行,包括Windows、Linux、Mac OS等。这使得Java程序的开发和部署变得更加灵活和方便。 Java程序的编写需要遵循面向对象的编程思想,即将程序...

    Java 项目-java的JAVA+SQL电子通讯录带系统托盘(源代码).zip

    该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 一. 技术组成 技术栈:Java,使用 jdk1.8 即可 开发环境:IDEA /Ecplise 数据库:MySql (如果有的话) 二. 部署说明 1. Java...

    JAVA应用系统工具快捷托盘实例代码

    JAVA应用系统工具快捷托盘实例代码,需要的朋友可以参考一下

    java电子邮件收发系统 java源代码

    本邮件系统当有新邮件到达时可以提示,并且系统托盘中的邮件图标会闪动。本邮件系统是本人为了熟悉java而开发的,肯定有很多不足之处,大家可以自行改正。嘿嘿 本压缩包包括源代码和可执行的压缩包!

    JAVA+SQL电子通讯录带系统托盘(lw+源代码).zip

    这个项目是一个基于Java语言开发的Web应用程序,采用SSM(Spring+SpringMVC+MyBatis)或SSH(Spring+SpringMVC+Hibernate)框架进行开发,使用MySQL作为数据存储,JSP作为页面开发。 项目的目标是构建一个高效、可靠...

    JAVA+SQL电子通讯录带系统托盘(论文+源代码).rar

    该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:Vue/JSP/React/HTML+JS+CSS/ASP 后台框架代码:java/c/c++/...

    java电子邮件收发系统 java源代码(2.2版)

    本邮件系统当有新邮件到达时可以提示,并且系统托盘中的邮件图标会闪动。本邮件系统是本人为了熟悉java而开发的,肯定有很多不足之处,大家可以自行改正。嘿嘿 本压缩包包括源代码和可执行的压缩包!

    PomodoroTray:Pomodoro 技术托盘应用程序(Java SE、SystemTray)

    番茄工作台java 桌面系统托盘应用程序。工作流程当您启动应用程序时,它会在系统托盘中放置图标。 最初它是黄色的,因为它处于待机模式。 红色意味着你应该工作,绿色 - 休息一下。 有可用的上下文弹出菜单,它使...

    javamail邮件系统(java邮件系统源代码)

    本邮件系统当有新邮件到达时可以提示,并且系统托盘中的邮件图标会闪动。本邮件系统是本人为了熟悉java而开发的,肯定有很多不足之处,大家可以自行改正。嘿嘿 本压缩包包括源代码和可执行的压缩包!

Global site tag (gtag.js) - Google Analytics