java托盘提示小程序

2 篇文章 0 订阅
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;

/**
 *
 * 创建闪动的托盘图像
 *
 * @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();
            }
        });
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值