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中实现这样的功能。 首先,我们要了解`TrayIcon`类,这是Java Swing库中的一个关键组件,用于在系统托盘中创建和管理图标。在`TrayIconDemo.java`...
下面我们将详细探讨Java系统托盘和任务栏的相关知识点。 首先,创建一个`TrayIcon`对象需要以下步骤: 1. 检查系统是否支持系统托盘:使用`SystemTray`类的静态方法`getSystemTray()`,如果返回`null`,则表示当前...
在Java编程环境中,系统托盘(System Tray)功能允许应用程序在主窗口最小化后仍然在操作系统任务栏的托盘区域保持存在,以便用户可以轻松访问和控制应用。这对于那些需要后台运行或者不需要频繁显示用户界面的应用...
以下是一个简单的Java系统托盘应用的实现步骤: 1. **导入必要的库**: 首先,你需要导入`javax.swing.*`和`java.awt.*`库,因为`TrayIcon`类位于`java.awt`包下,而Swing库则提供了创建图形用户界面(GUI)所需的...
本资源提供了一个完整的Java系统托盘实现的源代码,可以帮助开发者学习如何在Java应用中集成系统托盘功能。 系统托盘在Java中是通过`java.awt.TrayIcon`类来实现的,该类是在Java 6中引入的。以下是对这个知识点的...
总结来说,创建Java系统托盘图标程序涉及使用`TrayIcon`类、创建图标、构建弹出菜单、添加事件监听以及处理系统托盘事件。通过熟练掌握这些步骤,开发者可以让应用程序在后台静默运行,同时保持与用户的交互性,提高...
Java系统托盘是Java应用程序与操作系统桌面环境交互的一种方式,它允许程序在主窗口最小化或隐藏时,仍然可以通过系统托盘图标进行操作。在Windows系统中,这种功能通常表现为程序图标出现在开始菜单右下角的任务栏...
#### 二、Java系统托盘API介绍 从Java SE 6(即JDK 1.6)开始,官方提供了内置的支持来创建系统托盘图标,这主要通过`java.awt.SystemTray`类实现。`SystemTray`类是用于创建托盘图标的入口类,它提供了一些静态方法...
在Java编程语言中,创建一个类似QQ右下角图标效果的应用涉及到Java的系统托盘(System Tray)功能。系统托盘允许程序在主界面关闭后仍然在操作系统的通知区域保持活跃,用户可以通过点击托盘图标来恢复或与应用程序...
在Java编程中,系统托盘(System Tray)也被称为通知区域或系统托盘区,它位于操作系统界面的右下角,通常用于显示各种程序的小图标,...通过设置图标、菜单和事件监听器,你可以创建出具有丰富交互性的系统托盘应用。
在Java编程环境中,实现系统托盘功能是一项常见的需求,它允许程序在主窗口最小化或关闭后仍然在操作系统任务栏的系统托盘区域保持活跃,从而提供便捷的访问入口,如QQ、微信等应用程序就广泛使用了这一特性。...
参考提供的`SystemTrayDemo`文件,应该包含了一个完整的系统托盘应用示例,包括创建图标、添加事件监听器、创建上下文菜单以及添加到系统托盘的过程。通过阅读和理解这段代码,你可以了解到如何在Swing应用中实现...
实现Java中的系统托盘功能,可以增强应用程序与用户的交互性,尤其是在后台运行时提供通知的能力。 首先,我们需要导入相关的Java库来使用系统托盘功能。这通常涉及到`java.awt.TrayIcon`和`java.awt.Toolkit`这两...
在Java编程语言中,"托盘"通常指的是系统托盘,也就是我们常说的系统通知区域,位于操作系统桌面右下角的任务栏附近。而"气泡"则是指在托盘图标上弹出的信息提示框,用于向用户显示简短的通知或消息。这个"java实现...
Java托盘小例子是一个实用的程序,它展示了如何在Java应用程序中实现系统托盘功能。在许多现代桌面应用中,用户界面(UI)通常包含一个托盘图标,允许程序在后台运行并提供快速访问菜单选项,即使窗口已被最小化。在...
在Java编程中,有时我们需要创建一个系统托盘图标来提供应用程序的后台运行和快速访问功能。本主题将探讨如何在SWT(Standard Widget Toolkit)和JDK 6中实现这一功能。 首先,让我们从SWT(Standard Widget ...
以上代码实现了将Java应用窗口最小化至系统托盘的功能,并满足了最初设定的所有需求。开发者可以根据实际应用场景对代码进行适当的调整和优化。值得注意的是,虽然这里使用的Eclipse SWT库提供了一个很好的解决方案...
"JAVA应用 之 快捷工具托盘++"这个标题暗示我们,它可能是一个Java程序,专注于提供一种桌面快捷工具,能够以系统托盘的形式存在,方便用户快速访问和管理。这种类型的程序通常会集成在操作系统任务栏的右下角,为...