`
ypf3027
  • 浏览: 306793 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • JAVA
阅读更多

 

发一个小例子供大家参考,java实现托盘闪动消息提醒,同时播放声音提醒。源码参见附件。

 

 

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.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();
			}
		});
	}

}

 

 

 运行效果图:

 


 

 

  • msg.rar (3.3 MB)
  • 下载次数: 4107
  • 大小: 45.1 KB
分享到:
评论
18 楼 kisslips 2011-05-09  
Tu_Dou 写道
正在写一个聊天程序,有系统托盘。就是接收信息时候没手闪动。看到这个代码,舒坦了。

哈哈,刚刚在也在弄呢,可是自己实现的头像抖动很生硬,不知道楼主的这个怎么样。非常感谢楼主的共享!
17 楼 Tu_Dou 2011-05-08  
正在写一个聊天程序,有系统托盘。就是接收信息时候没手闪动。看到这个代码,舒坦了。
16 楼 tiaccp 2010-12-27  
不会玩,不过看到挺不错哦
15 楼 pywepe 2010-12-18  
试了,好像没有效果
14 楼 yidao620c 2010-12-16  
试过,还真的不错。原来托盘可以这么做。^_^
13 楼 wangchengyong 2010-12-16  
很强大,xp的系统,点出消息,鼠标选择消息文字,整个桌面抖动。
如果移动下消息窗口,桌面不抖动。
12 楼 liwei113114 2010-12-16  
aixuebo 写道
问一下那两个jar包是什么jar啊。没见过那?也是楼主自己开发的吗??源代码分享一下被。谢谢

应该是swing的风格吧~
11 楼 aixuebo 2010-12-15  
问一下那两个jar包是什么jar啊。没见过那?也是楼主自己开发的吗??源代码分享一下被。谢谢
10 楼 ypf3027 2010-12-15  
pufan 写道
怎么不用Timer来做定时,用Thread代码既丑陋还不在EDT内。

这只是个示例,怎么做定时,根据自己的项目情况去实现吧!
9 楼 pufan 2010-12-15  
怎么不用Timer来做定时,用Thread代码既丑陋还不在EDT内。
8 楼 yuyue007 2010-12-15  
好东西~~

将右下角的战争进行到底。。。
7 楼 javabkb 2010-12-15  
下载测试了,真不错,准备学习一下源码。
6 楼 ypf3027 2010-12-15  
yzsunlight 写道
怎么是乱码?消息内容 源码里 注释也是乱码

我的文件编码方式是UTF-8,改一下项目编码方式就正常了。个人建议大家都用UTF-8编码,用GB2312编码只满足国内用户。
5 楼 倚地屠蛇 2010-12-15  
托盘图标上右键是乱码怎么解决?
4 楼 大器晚成 2010-12-15  
支持下   SWING越来越强大了
3 楼 zeronelee 2010-12-15  
yzsunlight 写道
怎么是乱码?消息内容 源码里 注释也是乱码

改一下文件编码格式
2 楼 yzsunlight 2010-12-15  
怎么是乱码?消息内容 源码里 注释也是乱码
1 楼 itlangqun 2010-12-15  
我试了试真不错,之前我只做到了托盘程序,闪动与声音提示都没成功。

相关推荐

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

    总之,托盘闪动消息提醒是提高用户体验的重要工具,而Java的`TrayIcon`类为此提供了便利。结合声音提示,这种提醒方式能确保用户不会错过任何关键信息,从而提升软件的实用性。通过分析和实践这个JAVA版的示例,...

    Delphi 程式动态托盘图标

    当有新消息或其他重要状态时,让图标在两个或更多图标之间切换,达到闪烁效果。 7. **资源管理**:记得正确管理和释放图标资源,避免内存泄漏。在程序退出时,确保释放所有分配的图标资源。 8. **兼容性和测试**:...

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

    窗口闪动功能通常用于提醒用户有新的消息或事件发生。在Delphi中,可以使用`FlashWindow` API函数来实现这一功能。`FlashWindow`有两个参数:一个是窗口句柄,另一个是是否连续闪动的标志。以下是一个简单的示例: ...

    系统托盘闪动菜单(C# 实例 源码-经典3分)

    本实例——“系统托盘闪动菜单”是C#编程中的一个常见应用场景,主要用于创建一个在系统托盘区闪烁的菜单,提醒用户有新消息或事件发生。这个实例可能被用于开发桌面应用,如即时通讯软件、邮件客户端等。 首先,...

    VB写的一个关于托盘源码

    “或者类似于QQ那样的托盘闪动”是说,当有新消息或事件发生时,应用可以在托盘图标上创建一种视觉效果,如闪烁,以吸引用户的注意力。这需要对VB源码进行修改,以实现特定的事件触发和动画效果。在VB中,可以使用...

    【转】闪动托盘

    通常,当应用程序有新的消息、通知或需要用户关注的事件时,它会在任务栏的系统托盘区域进行闪烁,以提醒用户。这个技术在很多软件和操作系统中都有应用,比如Windows系统中的各种应用程序。 在给定的资源中,虽然...

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

    - 为了处理托盘区的双击事件,你需要重载`OnNCLButtonDown()`消息处理函数,并检查消息参数中的`wHitTest`值是否为`HTCLIENT`,如果是,则可能是一个双击事件。 - 可以通过`TrackPopupMenu()`函数来显示右键快捷...

    C#在任务栏显示仿QQ闪动的消息通知窗口

    摘要:C#源码,菜单窗体,任务栏,通知窗口 C#在任务栏显示消息通知窗口,像QQ收到消息的闪动图标一样,本程序仅是演示了闪动的通知窗口,并不具备进一步的功能,程序源代码开源、简单,适合学习C#的网友参考。

    高仿QQ源码

    14、托盘闪动:跟QQ完全一样,当接收到消息时,托盘会闪动对应好友的头像。点击头像,将弹出与好友的聊天框。 15、最近联系人列表 16、系统设置:开机自动启动、麦克风设备索引、摄像头设备索引,叉掉主窗口时...

    即时通信系统GGTalk(支持PC和Android,高仿QQ)源码 GGRealTimeGGTalk.rar

    14、托盘闪动:跟QQ完全一样,当接收到消息时,托盘会闪动对应好友的头像。点击头像,将弹出与好友的聊天框。 15、最近联系人列表 16、系统设置:开机自动启动、麦克风设备索引、摄像头设备索引,叉掉主窗口时

    GG2014版源码。仿QQ聊天软件

    (19)托盘闪动:跟QQ完全一样,当接收到消息时,托盘会闪动对应好友的头像。点 击头像,将弹出与好友的聊天框。 (20)输入提醒:像QQ一样,当对方正在输入消息时,我这边的聊天框可以看到对方 “正在输入”的...

    GGTalk-V6.0源码、部署版及安卓源码

    (14)托盘闪动:跟QQ完全一样,当接收到消息时,托盘会闪动对应好友的头像。点击头像,将弹出与好友的聊天框。 (15)最近联系人列表 (16)系统设置:开机自动启动、麦克风设备索引、摄像头设备索引,叉掉主窗口时...

    c# QQ源码,部署版本见另一个资源

    (14)托盘闪动:跟QQ完全一样,当接收到消息时,托盘会闪动对应好友的头像。点击头像,将弹出与好友的聊天框。 (15)最近联系人列表 (16)系统设置:开机自动启动、麦克风设备索引、摄像头设备索引,叉掉主窗口时...

    即时通信系统GGTalk(支持PC和Android,高仿QQ)源码 GGRealTimeCommunication.rar

    14、托盘闪动:跟QQ完全一样,当接收到消息时,托盘会闪动对应好友的头像。点击头像,将弹出与好友的聊天框。 15、最近联系人列表 16、系统设置:开机自动启动、麦克风设备索引、摄像头设备索引,叉掉主窗口时...

    GG即时通讯系统GGTalk 6.2 源码版.rar

    (12)离线消息(13)离线文件(14)托盘闪动:跟QQ完全一样,当接收到消息时,托盘会闪动对应好友的头像。点击头像,将弹出与好友的聊天框。(15)最近联系人列表(16)系统设置:开机自动启动、麦克风设备索引、...

    GG叽叽(QQ高仿)v4.4源码 GGQQ2014V4.4.rar

    14、托盘闪动:跟QQ完全一样,当接收到消息时,托盘会闪动对应好友的头像。点击头像,将弹出与好友的聊天框。 15、最近联系人列表 16、系统设置:开机自动启动、麦克风设备索引、摄像头设备索引,叉掉主窗口时...

    c# QQ可执行文件,源码见另一个资源

    (14)托盘闪动:跟QQ完全一样,当接收到消息时,托盘会闪动对应好友的头像。点击头像,将弹出与好友的聊天框。 (15)最近联系人列表 (16)系统设置:开机自动启动、麦克风设备索引、摄像头设备索引,叉掉主窗口时...

    易语言任务栏程序图标的简单隐藏和显示

    源码通常包含初始化图标、处理消息、隐藏和显示图标的函数等关键部分。 通过以上步骤,你可以使用易语言轻松地实现任务栏程序图标的隐藏和显示。这个过程不仅涉及到易语言的基本语法,还涵盖了Windows API的使用,...

    GG即时通讯系统GGTalk v6.2.zip

    (14)托盘闪动:跟QQ完全一样,当接收到消息时,托盘会闪动对应好友的头像。点击头像,将弹出与好友的聊天框。 (15)最近联系人列表 (16)系统设置:开机自动启动、麦克风设备索引、摄像头设备索引,叉掉主窗口...

    GG即时通讯系统_GGTalk v7.0完整版_新增Xamarin移动端_视频聊天

    GG即时通讯系统GGTalk,包括客户端、服务端、数据库...(14)托盘闪动:跟QQ完全一样,当接收到消息时,托盘会闪动对应好友的头像。点击头像,将弹出与好友的聊天框。 (15)最近联系人列表 (16)系统设置:开机自动

Global site tag (gtag.js) - Google Analytics