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#实现闪动托盘图标示例,模仿QQ或Foxmail,任务执行时实现托盘图标闪动效果。
会闪动的托盘 , 可以加载自己想要的托盘图片 , 可以模仿qq图标来信息时的闪动
QQ托盘图标闪动
托盘闪动消息提醒(有声音+源码) 本实例基于Eclipse开发。
本托盘示例原作者为付林林,本人只是略作修改。原来的示例没有把图标闪动、信息定时隐蔽写出来,现已加上。挺好用的,推荐!在XP/2000都顺利测试通过,可升级到 PB11.5或其它高版本。
vb.net的托盘图标闪动,适用于程序获取的信息有变动时的通知。 仿QQ来消息时的闪动频率。 希望对初学者有所帮助。
delphi 实现闪动、动画、托盘的源码
MFC,仿QQ系统托盘闪动的现成例子.可以直接拿来用.
用户上线后自动加载用户信息,用户修改头像后其他用户也会自动加载更新,消息发送过来头像会跳动,当最小化到托盘后,托盘图标也会闪动。用户间可以传递文件,发送消息。服务端可以向每个用户发送消息 可以直接运行...
本文实例讲述了C#实现闪动托盘图标效果的方法。分享给大家供大家参考,具体如下: 在用户正在登录QQ或者使用Firemail邮件系统自动收取邮件的时候,托盘图标会闪动提示用户正在运行的任务。 闪动图标可以使用定时切换...
C#程序源代码 类似QQ托盘图标闪动效果
像qq一样实现托盘图标闪动像 像qq一样实现托盘图标闪动 像qq一样实现托盘图标闪动像qq一样实现托盘图标闪动
windows系统托盘编程,编写的程序可以像电脑微信一样在托盘创建图标并闪动
闪动只要每隔一段时间换另外一个ico就可以实现了 但是闪动呢,这个例子就实现了 C# 在Windows托盘处旋转图标 C#实例 状态栏 ico图标特效 旋转 Notify
用于托盘图标事件,功能不多,也不少,支持托盘闪动,气泡提示
实现 mfc 对话框的托盘创建,鼠标单击,双击,右键响应及托盘图片闪烁.
C#托盘程序,类似QQ图标闪动的效果,程序启动后就会有类似QQ图标闪动的效果