码迷,mamicode.com
首页 > Windows程序 > 详细

Swing带TrayIcon(托盘小图标)的Hello world示例

时间:2015-08-20 18:30:44      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:

        首先上一个经典的Hello world示例:

 1 package com.xxx.yyy.zzz;
 2 
 3 import javax.swing.JFrame;
 4 
 5 public class MainFrame extends JFrame {
 6 
 7     private static final long serialVersionUID = -3059928131346032935L;
 8     public MainFrame() {
 9         super();
10         this.setSize(300, 200);
11         this.getContentPane().setLayout(null);
12         this.setTitle("Hello world!");
13         /// 设置点击窗口右上角“关闭”时的行为,点击“关闭”时停止主循环,退出程序
14         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
15     }
16 }
17 
18 class Main {
19     public static void main(String[] args) {
20         MainFrame frm = new MainFrame();
21         frm.setVisible(true);
22     }
23 }

        在eclipse下编译运行上述代码,显示如下的小窗口:

技术分享

        很多应用软件都会在点击“最小化”这个按钮时,将窗口缩小到任务栏的数字时钟附近的一个小区域(托盘)。java自1.6版以后,在AWT里新增了两个类:SystemTray,TrayIcon。通过这两个类,java也能使用托盘图标了。

        使用TrayIcon,需要准备一个小图标。jpg、png等通用的图片格式貌似都可以用,不支持M$的ico。不知道对图片的尺寸有没有要求,本人准备的是一个32*32的png,比划了一下,托盘图标的大小貌似是16*16,有可能Java会在内部做了转换呢。

        以下是添加了TrayIcon之后的代码,最小化时隐藏窗口,显示托盘图标;点击图标时,图标消失,窗口复原。不过很可惜图标在托盘中只有一片空白,即使换成16*16的图片也是这样。

 1 /// 实现接口WindowListener
 2 public class MainFrame extends JFrame implements WindowListener{
 3 
 4     private static final long serialVersionUID = -3059928131346032935L;
 5     /// 32*32的png图像
 6     private static Image image = Toolkit.getDefaultToolkit().getImage("/c_cyan.png");
 7     /// TrayIcon对象
 8     private static TrayIcon trayIcon = new TrayIcon(image,"xx助手");
 9 
10     public MainFrame() {
11         super();
12         this.setSize(300, 200);
13         this.getContentPane().setLayout(null);
14         this.setTitle("Hello world!");
15         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
16         /// 注册本窗口Window相关事件监听器
17         this.addWindowListener(this);
18     }
19 
20     public void windowActivated(WindowEvent e) {}
21 
22     public void windowClosed(WindowEvent e) {}
23 
24     public void windowClosing(WindowEvent e) {}
25 
26     public void windowDeactivated(WindowEvent e) {}
27 
28     public void windowDeiconified(WindowEvent e) {
29     }
30 
31     public void windowIconified(WindowEvent e) {
32         /// 检测操作系统是否支持系统托盘
33         if (!SystemTray.isSupported()) {
34             return;
35         }
36 
37         final MainFrame parent = this;
38         final SystemTray systemTray = SystemTray.getSystemTray();
39 
40         /// 设置TrayIcon自动调整图像大小,看来这么设置之后不用再关注图片尺寸了
41         trayIcon.setImageAutoSize(true);
42         /// TrayIcon添加击事件的监听器,点击后恢复主窗口,删除TrayIcon
43         trayIcon.addActionListener(new ActionListener() {
44             public void actionPerformed(ActionEvent event) {
45                 /// 显示主窗口
46                 parent.setVisible(true);
47                 /// 从系统托盘之中移除TrayIcon,因为同一个TrayIcon不能添加两次
48                 systemTray.remove(trayIcon);
49             }
50         });
51 
52         try {
53             /// 往系统托盘之中添加TrayIcon
54             systemTray.add(trayIcon);
55         } catch (AWTException exception) {
56             exception.printStackTrace();
57         }
58 
59         /// 隐藏本窗口
60         parent.setVisible(false);
61     }
62 
63     public void windowOpened(WindowEvent e) {}
64 }

Swing带TrayIcon(托盘小图标)的Hello world示例

标签:

原文地址:http://www.cnblogs.com/dsdk2008/p/4745898.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!