- 浏览: 43584 次
- 性别:
- 来自: 深圳
文章分类
最新评论
引用http://www.iteye.com/topic/841846
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();
}
});
}
}
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();
}
});
}
}
- 73328cc9-2339-3dda-88f0-a828cb6e84db.rar (3.3 MB)
- 下载次数: 11
发表评论
-
java注解
2019-03-27 13:42 0https://blog.csdn.net/mrs_wu/a ... -
jsonp原理
2019-03-26 15:39 0https://blog.csdn.net/hansexpl ... -
BufferedImage在linux下createGraphics卡住的问题
2019-02-28 17:30 0BufferedImage在linux下createGra ... -
记第二次面试(平安)
2019-02-21 22:31 01.JVM调优 2.线程池,几种线程的帮助类 3.Has ... -
ueditor处理webp图片
2019-02-28 17:26 660今天运营MM突然说,资讯管理功能用不了,从 ... -
记一次面试(金地)
2019-01-28 09:40 0首先是笔试部分: 1. ... -
java io
2018-11-28 23:43 0https://www.cnblogs.com/hoojj ... -
Java 集合详解
2018-11-26 15:27 0https://www.cnblogs.com/ysocean ... -
Redis分布式锁的正确实现方式
2018-10-06 10:44 507分布式锁一般有三种实现方式: 1. 数据库乐观锁; 2 ... -
在 CentOS7 上安装 Tomcat9
2018-01-30 19:25 3536 下载 apache-tomcat-9.0.0.M4.t ... -
在CentOS7上安装JDK1.8
2018-01-30 18:50 3661 通过 SecureCRT 连接到阿里云 CentOS7 ... -
centos7自定义安装redis
2017-12-18 16:26 5311.下载 wget http://download.re ... -
centos7自定义安装mysql5.7
2017-12-15 18:12 4731.查找卸载原有的mysql 方法1 rpm -qa| ... -
centos7 安装nginx
2017-12-13 18:18 3161.解压 tar -xf nginx-1.10.1.ta ... -
mysqldump 每日定时备份
2017-09-25 19:37 606首先编写脚本: date_cur=$(date &quo ... -
centos7 安装nginx
2017-05-15 16:07 01、下载nginx-release包 以CentOS 7为 ... -
读书笔记
2017-04-18 11:31 02017-04-18 1.程序员,这 ... -
centos7下mongodb的安装与配置
2017-04-13 16:59 6881.下载mongodb安装包 https://www.m ... -
服务器迁移心得
2016-11-04 15:22 4751.数据传输直接从源到目标,不要经过自己的电脑,用到的li ... -
svn lock
2016-09-13 10:33 431在网上的解决方案中,往往都是通过Clean up来解决,如下 ...
相关推荐
本实例着重讲解如何在JAVA应用程序中实现托盘通知功能,同时伴有声音提示,这对于桌面应用来说尤其重要,因为它们需要在用户界面不被占据的情况下,有效地吸引用户的注意力。 首先,让我们了解一下Java中的系统托盘...
实现Java中的系统托盘功能,可以增强应用程序与用户的交互性,尤其是在后台运行时提供通知的能力。 首先,我们需要导入相关的Java库来使用系统托盘功能。这通常涉及到`java.awt.TrayIcon`和`java.awt.Toolkit`这两...
用户上线后自动加载用户信息,用户修改头像后其他用户也会自动加载更新,消息发送过来头像会跳动,当最小化到托盘后,托盘图标也会闪动。用户间可以传递文件,发送消息。服务端可以向每个用户发送消息 可以直接运行...
Qt 实现系统托盘,托盘菜单,托盘消息Qt 实现系统托盘,托盘菜单,托盘消息Qt 实现系统托盘,托盘菜单,托盘消息Qt 实现系统托盘,托盘菜单,托盘消息Qt 实现系统托盘,托盘菜单,托盘消息Qt 实现系统托盘,托盘菜单...
这个"java实现托盘、气泡程序源码"是一个实用的示例,可以帮助开发者了解如何在Java应用程序中实现这样的功能。 首先,让我们详细了解一下Java中的系统托盘和气泡提示的实现原理: 1. **系统托盘(System Tray)**...
在Java编程环境中,实现系统托盘功能可以让程序在主窗口关闭后仍然在操作系统任务栏的托盘区域保留图标,以便用户随时访问。本主题将详细探讨两种实现方式:JNI(Java Native Interface)和JDK 6.0及更高版本提供的...
jar文件双击可以执行,jar里有源代码,可以用解压缩工具查看。 Java实现系统托盘
以下将详细介绍如何使用Java和Swing实现托盘功能。 首先,要使用`TrayIcon`,需要确保操作系统的任务栏支持这一特性。在Java中,我们可以通过`SystemTray`类来检查是否支持托盘功能: ```java import java.awt....
首先,我们需要引入Java的`javax.swing.SystemTray`和`javax.swing.TrayIcon`类,这两个类是实现托盘功能的关键。`SystemTray`代表了操作系统的系统托盘区域,而`TrayIcon`则表示托盘中的图标及其关联的操作。 1. *...
Java中的系统托盘功能主要通过Java的Swing库来实现,下面我们将详细探讨如何使用Java实现系统托盘。 首先,我们需要导入相关的Java库,特别是javax.swing.*,因为系统托盘的功能主要包含在这个库中。以下是一个简单...
在ASP.NET中,实现托盘消息通常是指在客户端(用户浏览器)上模拟类似QQ这样的桌面应用,能够在屏幕右下角弹出通知或消息窗口的功能。这涉及到JavaScript或者JQuery等客户端脚本技术,因为ASP.NET本身是服务器端的...
### JAVA实现系统托盘知识点详解 #### 一、概述 在现代软件开发中,系统托盘功能被广泛应用于各类应用程序中,特别是在Windows操作系统上。它为用户提供了方便的应用程序控制方式,同时也帮助开发者以更优雅的方式...
本主题聚焦于“Delphi 程式动态托盘图标”,这涉及到如何在Delphi程序中实现一个功能,使得应用可以在系统托盘区域显示动态图标,如常见的即时通讯软件QQ的图标闪烁效果。 系统托盘图标是应用程序在任务栏右下角...
### JavaQQ实现托盘功能详解 在Java开发中,实现应用程序的系统托盘功能是一种常见的需求,尤其是在设计桌面应用时,如即时通讯软件、音乐播放器等,它能提升用户体验,使程序更加人性化。本文将详细解析如何在Java...
这种提醒方式与QQ的新消息提醒类似,通过在系统托盘区域进行图标闪烁来吸引用户的注意力。下面将详细介绍托盘邮件提醒的工作原理、实现方式以及其在实际应用中的价值。 首先,托盘邮件提醒是基于操作系统提供的系统...
QT托盘消息模拟QQ消息列表通知是一个在QT框架下实现的应用程序功能,它允许软件在系统托盘区域显示类似于QQ消息列表的通知。这个功能对于那些希望在后台运行且不占用大量桌面空间的应用程序来说非常实用。以下是关于...
这个"JAVA系统托盘图标控制程序"是一个示例项目,展示了如何在Java中实现这样的功能。 首先,我们要了解`TrayIcon`类,这是Java Swing库中的一个关键组件,用于在系统托盘中创建和管理图标。在`TrayIconDemo.java`...
在DelphiXE开发环境中,创建一个能够实现在屏幕右下角显示消息提醒的托盘应用程序是一项常见的需求。这种功能常用于后台运行的应用程序,以便在需要时向用户发送通知,而不会干扰用户的主工作区。下面我们将深入探讨...
总结来说,Java的系统托盘功能使得开发者可以创建更加友好且易于访问的应用程序,通过`TrayIcon`类提供的API,能够轻松实现图标显示、用户交互以及弹出菜单等功能,从而提升应用的易用性和可维护性。