Swing带TrayIcon(托盘小图标)的Hello world示例
2015-08-20 17:38
246 查看
首先上一个经典的Hello world示例:
在eclipse下编译运行上述代码,显示如下的小窗口:
很多应用软件都会在点击“最小化”这个按钮时,将窗口缩小到任务栏的数字时钟附近的一个小区域(托盘)。java自1.6版以后,在AWT里新增了两个类:SystemTray,TrayIcon。通过这两个类,java也能使用托盘图标了。
使用TrayIcon,需要准备一个小图标。jpg、png等通用的图片格式貌似都可以用,不支持M$的ico。不知道对图片的尺寸有没有要求,本人准备的是一个16*16的png,比划了一下,托盘图标的大小大概是16*16。Java的TrayIcon内部做了图像转换机制,只要设置好就行了。
以下是添加了TrayIcon之后的代码,最小化时隐藏窗口,显示托盘图标;点击图标时,图标消失,窗口出现。
换个32*32大小的图标,再编译运行,同样也能达到效果,只是显示出来的小图标没有16*16的清晰。
package com.xxx.yyy.zzz; import javax.swing.JFrame; public class MainFrame extends JFrame { private static final long serialVersionUID = -3059928131346032935L; public MainFrame() { super(); this.setSize(300, 200); this.getContentPane().setLayout(null); this.setTitle("Hello world!"); /// 设置点击窗口右上角“关闭”时的行为,点击“关闭”时停止主循环,退出程序 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } class Main { public static void main(String[] args) { MainFrame frm = new MainFrame(); frm.setVisible(true); } }
在eclipse下编译运行上述代码,显示如下的小窗口:
很多应用软件都会在点击“最小化”这个按钮时,将窗口缩小到任务栏的数字时钟附近的一个小区域(托盘)。java自1.6版以后,在AWT里新增了两个类:SystemTray,TrayIcon。通过这两个类,java也能使用托盘图标了。
使用TrayIcon,需要准备一个小图标。jpg、png等通用的图片格式貌似都可以用,不支持M$的ico。不知道对图片的尺寸有没有要求,本人准备的是一个16*16的png,比划了一下,托盘图标的大小大概是16*16。Java的TrayIcon内部做了图像转换机制,只要设置好就行了。
以下是添加了TrayIcon之后的代码,最小化时隐藏窗口,显示托盘图标;点击图标时,图标消失,窗口出现。
/// 实现接口WindowListener public class MainFrame extends JFrame implements WindowListener{ private static final long serialVersionUID = -3059928131346032935L; /// 32*32的png图像 private static Image image = Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource("c_cyan.png")); /// TrayIcon对象 private static TrayIcon trayIcon = new TrayIcon(image,"xx助手"); public MainFrame() { super(); this.setSize(300, 200); this.getContentPane().setLayout(null); this.setTitle("Hello world!"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /// 注册本窗口Window相关事件监听器 this.addWindowListener(this); } public void windowActivated(WindowEvent e) {} public void windowClosed(WindowEvent e) {} public void windowClosing(WindowEvent e) {} public void windowDeactivated(WindowEvent e) {} public void windowDeiconified(WindowEvent e) { } public void windowIconified(WindowEvent e) { /// 检测操作系统是否支持系统托盘 if (!SystemTray.isSupported()) { return; } final MainFrame parent = this; final SystemTray systemTray = SystemTray.getSystemTray(); /// 设置TrayIcon自动调整图像大小,看来这么设置之后不用再关注图片尺寸了 trayIcon.setImageAutoSize(true); /// TrayIcon添加击事件的监听器,点击后恢复主窗口,删除TrayIcon trayIcon.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { /// 显示主窗口,设置窗口为正常状态 parent.setVisible(true); parent.setExtendedState(JFrame.NORMAL); /// 从系统托盘之中移除TrayIcon,因为同一个TrayIcon不能添加两次 systemTray.remove(trayIcon); } }); try { /// 往系统托盘之中添加TrayIcon systemTray.add(trayIcon); } catch (AWTException exception) { exception.printStackTrace(); } /// 隐藏本窗口 parent.setVisible(false); } public void windowOpened(WindowEvent e) {} }
换个32*32大小的图标,再编译运行,同样也能达到效果,只是显示出来的小图标没有16*16的清晰。
相关文章推荐
- JAVA抽象类和接口
- Oracle左连接、右连接、全外连接以及(+)号用法
- Linux下安装mongodb详细过程
- 整理MySql常用查询语句(23种)
- getline用法
- hdoj2066一个人的旅行
- Gcc与Make编译C/C++学习
- 字节(byte)与比特(bit)
- UVA 4854 A Digital Satire of Digital Age(模拟)
- 类/类别中的property属性
- IT痴汉的工作现状42-Android越用越慢?立场不同,谈何信任!
- CURL的学习和应用
- css 中visibility:hidden和display:none有什么区别呢
- Spring(一)——总体介绍
- 关于面试中的fork()问题
- PowerDesigner PDM 生成SQL脚本 去除双引号方法
- Android最佳性能实践(1):合理管理内存
- 华为机试-匹配类问题-翻译电话号码
- php curl的几个例子
- 兼容所有浏览器的CSS3圆角