Java.任务盘(在......)系统托盘(图标)。指示和闪烁
Java.任务盘(在......)系统托盘本节将介绍用于显示和闪烁
在实用程序类中,Java SE 6 Mustang 新增的功能是 java.awt.SystemTray. ,,java.awt.TrayIcon. 类。此外,还附带了一个示例应用程序来演示如何使用它。
系统托盘(任务栏)功能
系统托盘(任务托盘)是计算机屏幕右下角的一个小图标,Java SE 6 添加了以下类来使用系统托盘功能。
- java.awt.SystemTray.
SystemTray 类表示桌面系统托盘。 - java.awt.TrayIcon.
TrayIcon 对象表示可添加到系统托盘的托盘图标。
如何创建闪烁图标
以下网站可用于创建闪烁图标。
上传本地图标,创建闪烁图标。
https://www.bannerkoubou.com/anime/
应用实例
示例应用程序使用系统托盘实用程序类 TaskTrayUtil 实现以下功能
- 启动时任务盘表示人或物的位置、短期行为的位置等。图标显示。
- [闪烁按钮]任务盘闪烁图标表示
气球上也有 "把我从这里救出去!!!!"的信息。信息。 - 单击 [Release button] 取消图标闪烁。
- 任务盘图标,左键单击即可将主窗口显示在桌面上。
- 任务盘图标,单击右键显示默认 PopupMenu 菜单。
- 当主窗口最小化时。任务盘存放在
获取源代码
源代码可从以下网址获取编译时,请将以下图标保存在与源代码相同的位置。
导入 javax.swing.ImageIcon;
导入 javax.swing.JButton;
导入 javax.swing.JFrame;
导入javax.swing.JPanel;
导入 javax.swing.SwingUtilities;
导入 javax.swing.UIManager;
/**
* 在Java中显示/闪烁任务托盘(系统托盘)图标。
*
* ◆ 本课程概述
* TaskTray 类是处理任务托盘的实用程序。
* 提供以下功能:
* ・在任务托盘中显示图标。
* - 在任务托盘中显示弹出消息。
* - 使任务托盘闪烁。
*
* ◆ 使用方法
* 将目标 JFrame 类传递给下面的方法参数。
* ・createTray(JFrame targetFrame)
* ・createTray(最终JFrame targetFrame, Image图像, PopupMenu菜单)
*
*/
公共类 TaskTrayUtil {
私有静态 JFrame 框架;
私有静态 PopupMenu 默认菜单;
私有静态 TrayIcon 托盘图标;
私有静态 SystemTray 托盘 = SystemTray.getSystemTray();
私有静态对象 INSTANCE_LOCK = new Object();
/**
* 执行示例
* @参数参数
*/
公共静态无效主(字符串[] args){
尝试 {
// 将 LookAndFeel 设置为 Windows
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
// 常规图标
最终图像 img = new ImageIcon(
TaskTrayUtil.class.getResource(
“tray_icon.gif”)).getImage();
最终 JFrame 帧 =
new JFrame(“在任务托盘中显示/闪烁图标”);
框架.setSize(300, 100);
框架.setIconImage(img);
// 窗口最小化时存储在任务托盘中
// 添加 WindowListener 类,如图所示。
frame.addWindowListener(new WindowAdapter() {
公共无效windowIconified(WindowEvent e){
框架.setVisible(假);
}
});
JPanel jPanel = new JPanel();
jPanel.setLayout(new FlowLayout());
jPanel.setSize(new Dimension(219, 70));
// 闪烁图标
最终图像 imgLight =
新的 ImageIcon(TaskTrayUtil.class.getResource(
“tray_icon_light.gif”)).getImage();
JButton lightButton = new JButton(“闪烁”);
lightButton.addActionListener(new ActionListener(){
公共无效actionPerformed(ActionEvent e){
onAndOffLight(imgLight, null);
displayMessage(“消息”,“带我离开这里!!”);
}
});
JButton cancelButton = new JButton(“取消”);
取消按钮.addActionListener(new ActionListener(){
公共无效actionPerformed(ActionEvent e){
用删除替换图像(img);
}
});
jPanel.add(lightButton, null);
jPanel.add(cancelButton, null);
框架.add(jPanel);
// 结束处理。
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 在屏幕中央显示框架。
框架.setLocationRelativeTo(null);
// 创建任务托盘。
TaskTrayUtil.createTray(frame);
框架.setVisible(true);
} catch (异常 e) {
e.printStackTrace();
}
}
/**
*
*/
静止的 {
创建弹出菜单();
}
/**
* 生成一个默认的 PopupMenu 菜单,显示在任务托盘中。
*提供以下菜单。
* ・“从任务托盘中删除”
* 将目标应用程序从任务托盘移动到桌面
* 把它拿出来。
*(激活窗口并将其置于最前面。)
* - 终止要终止的应用程序。
*/
私有静态无效createPopupMenu(){
MenuItem getTrayItem = new MenuItem(“从任务托盘中删除”);
getTrayItem.addActionListener(new ActionListener() {
公共无效actionPerformed(ActionEvent e){
积极的();
}
});
MenuItem exitItem = new MenuItem(“退出”);
exitItem.addActionListener(new ActionListener() {
公共无效actionPerformed(ActionEvent e){
删除托盘图标();
TaskTrayUtil.frame.setVisible(false);
TaskTrayUtil.frame.dispose();
系统.退出(0);
}
});
默认菜单=新的弹出菜单();
defaultMenu.add(getTrayItem);
defaultMenu.add(exitItem);
}
/**
* 创建一个托盘图标并将其添加到系统托盘中。
* 为targetFrame设置图标上发生的事件的监听器
设置 *。
* 这里的事件是当双击托盘图标时。
* 提取目标应用程序。
* @param targetFrame 目标应用程序
*/
公共静态无效createTray(JFrame targetFrame){
createTray(targetFrame, null, null);
}
/**
* 创建一个托盘图标并将其添加到系统托盘中。
*
* @param targetFrame 目标应用程序
* @param image 要在托盘图标上显示的图像。
* 如果为null,可以通过getIconImage()从targetFrame中获取
* 使用图像图像。
* @param menu PopupMenu 显示在任务托盘中。
* 如果为null,则显示默认的PopupMenu。
*/
公共静态无效createTray(最终JFrame targetFrame,图像图像,
弹出菜单菜单){
// 如果系统托盘不支持则退出。
if (!SystemTray.isSupported()) {
返回;
}
TaskTrayUtil.frame = targetFrame;
如果(图像==空){
图像 = targetFrame.getIconImage();
}
如果(菜单==空){
菜单=默认菜单;
}
托盘Icon = new TrayIcon(图像, targetFrame.getTitle(), 菜单);
托盘图标.setImageAutoSize(true);
托盘Icon.addMouseListener(新MouseAdapter(){
公共无效鼠标点击(MouseEvent e){
如果 (SwingUtilities.isLeftMouseButton(e)) {
积极的();
}
}
});
尝试 {
托盘.add(trayIcon);
} catch (AWTException e1) {
e1.printStackTrace();
}
}
/**
* 从任务托盘中删除图标。
* 必须在应用程序退出时调用。
*/
公共静态无效removeTrayIcon(){
托盘.删除(trayIcon);
}
/**
* 使任务托盘图标闪烁。
* @param msg 如有必要,单击闪烁图标时
* 设置要显示的消息。
*/
公共静态无效onAndOffLight(图像lightImg,字符串msg){
替换图像(lightImg);
更改LightImgAdapter adap =
new TaskTrayUtil().new ChangeLightImgAdapter(msg);
托盘图标.addMouseListener(adap);
Frame.addWindowListener(adap);
}
/**
* 更改任务托盘图标。
* @param image 仅当与当前图标不同时才更改。
*/
公共静态无效替换图像(图像图像){
同步(INSTANCE_LOCK){
if (!image.equals(trayIcon.getImage())) {
托盘图标.setImage(图像);
}
}
}
/**
* 更改任务托盘图标。
* *如果您想恢复因某种原因闪烁的图标,
* 除非用{@link SystemTray#remove(TrayIcon)})删除它,否则它似乎没有用。
* @param image 仅当与当前图标不同时才更改。
*/
公共静态无效replaceImageWithDelete(图像图像){
同步(INSTANCE_LOCK){
if (!image.equals(trayIcon.getImage())) {
托盘.删除(trayIcon);
托盘图标.setImage(图像);
尝试 {
托盘.add(trayIcon);
} catch (异常 e) {
e.printStackTrace();
}
}
}
}
/**
* 在任务托盘中显示弹出消息。
* @参数标题
* @参数文本
*/
公共静态无效displayMessage(字符串标题,字符串文本){
if (标题!= null || 文本!= null) {
托盘图标.displayMessage(标题,文本,
TrayIcon.MessageType.INFO);
}
}
/**
* 将目标应用程序从任务托盘移动到桌面
* 把它拿出来。
*/
私有静态无效活动(){
// 将帧状态恢复到正常状态。
TaskTrayUtil.frame.setExtendedState(JFrame.NORMAL);
TaskTrayUtil.frame.setAlwaysOnTop(true);
TaskTrayUtil.frame.setVisible(true);
TaskTrayUtil.frame.setAlwaysOnTop(false);
}
/**
* 单击闪烁图标时生成的事件
* 监听类。
*/
类 ChangeLightImgAdapter 实现 WindowListener、MouseListener {
字符串 lightImageText;
公共ChangeLightImgAdapter(字符串lightImageText){
this.lightImageText = lightImageText;
}
/**
* 单击任务托盘图标时
* 显示弹出消息。
*/
公共无效mousePressed(MouseEvent e){
TaskTrayUtil.displayMessage(null, lightImageText);
}
/**
* 当目标应用程序激活时闪烁
* 返回图标。
*/
公共无效窗口激活(WindowEvent e){
TaskTrayUtil.replaceImageWithDelete(TaskTrayUtil.frame
.getIconImage());
TaskTrayUtil.frame.removeWindowListener(this);
TaskTrayUtil.trayIcon.removeMouseListener(this);
}
公共无效windowClosed(WindowEvent e){}
公共无效windowClosing(WindowEvent e){}
公共无效windowDeactivated(WindowEvent e){}
公共无效windowDeiconified(WindowEvent e){}
公共无效windowIconified(WindowEvent e){}
公共无效窗口打开(WindowEvent e){}
公共无效mouseClicked(MouseEvent e){}
公共无效mouseEntered(MouseEvent e){}
公共无效mouseExited(MouseEvent e){}
公共无效mouseReleased(MouseEvent e){}
}
}