java实现系统托盘

转至:http://www.blogjava.net/kissjava/archive/2008/07/30/218654.html 谢谢
明天就要离开我的第一家公司,打算先去厦门玩几天再回深圳踏去寻找新东家的漫长道路。呵,开始说正事,今天看API无意中发现了一个jdk1.6新增的SystemTray类,才想起:是哦,java怎么实现系统托盘呢?

桌面的系统托盘即当程序最小化或者关闭按钮程序并没有退出,而是最小化在任务状态区域(Windows系统),当鼠标点击那个区域所在的图标有提示以及其他的操作。在 Microsoft Windows 上,它被称为“任务栏状态区域 (Taskbar Status Area)”,在 Gnome 上,它被称为“通知区域 (Notification Area)”,在 KDE 上,它被成为“系统托盘 (System Tray)”。系统托盘由运行在桌面上的所有应用程序共享。

jdk1.6 中新增了两个类来实现:SystemTray 和 TrayIcon,以下为详细介绍:

SystemTray 类介绍:
在某些平台上,可能不存在或不支持系统托盘,所以要首先使用SystemTray.isSupported()来检查当前的系统是否支持系统托盘

SystemTray 可以包含一个或多个 TrayIcon,可以使用 add(java.awt.TrayIcon) 方法将它们添加到托盘,当不再需要托盘时,使用 remove(java.awt.TrayIcon) 移除它。TrayIcon 由图像、弹出菜单和一组相关侦听器组成。

每个 Java 应用程序都有一个 SystemTray 实例,在应用程序运行时,它允许应用程序与桌面系统托盘建立连接。SystemTray 实例可以通过getSystemTray ()方法获得。应用程序不能创建自己的 SystemTray 实例。

TrayIcon类介绍:
TrayIcon 对象表示可以添加到系统托盘的托盘图标。TrayIcon 可以包含工具提示(文本)、图像、弹出菜单和一组与之关联的侦听器。

TrayIcon 可以生成各种 MouseEvent,并支持添加相应的侦听器,以接收这些事件的通知。TrayIcon 可以自己处理一些事件。例如,默认情况下,在 TrayIcon 上单击鼠标右键时,它将显示指定的弹出菜单。当鼠标悬停到 TrayIcon 上时,它将显示工具提示。
如:TrayIcon(Image image, String tooltip, PopupMenu popup) 创建带指定图像、工具提示和弹出菜单的 TrayIcon。

这是下面代码当鼠标放在这个“OK”上的提示
这是下面代码当鼠标右键点击“OK”上的显示


测试代码如下(注:jdk1.6):



import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class SystemTrayDemo extends JFrame{
private TrayIcon trayIcon = null;
public SystemTrayDemo(){
this.setTitle("系统托盘的例子");
jbInit();
this.setSize(200, 250);
this.setLocation(300, 300);
}
public void jbInit(){
if(SystemTray.isSupported()){ //检查当前系统是否支持系统托盘
SystemTray tray = SystemTray.getSystemTray();//获取表示桌面托盘区的 SystemTray 实例。
Image image = Toolkit.getDefaultToolkit().getImage("D:\\kissjava.gif");
PopupMenu popupMenu = new PopupMenu();
MenuItem exitItem = new MenuItem("关闭");
MenuItem menuItema = new MenuItem("menu a");
MenuItem menuItemb = new MenuItem("menu b");
MenuItem menuItemc = new MenuItem("menu c");
MenuItem menuItemd = new MenuItem("menu d");
exitItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
try{
System.exit(0);
}catch(Exception ex) {
ex.printStackTrace();
}
}
});
popupMenu.add(menuItema);
popupMenu.add(menuItemb);
popupMenu.add(menuItemc);
popupMenu.add(menuItemd);
popupMenu.add(exitItem);
trayIcon = new TrayIcon(image, "系统托盘{kissjava}", popupMenu);
trayIcon.addMouseListener(new java.awt.event.MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e) {
if(e.getClickCount()==2){
showIT(true);
}
}
});
try{
tray.add(trayIcon); // 将 TrayIcon 添加到 SystemTray。
} catch (AWTException e) {
System.err.println(e);
}
}else{
System.out.println("你的系统不支持系统托盘");
}
ImageIcon icon = new ImageIcon();
try{
URL url = new URL("http://img1.qq.com/ent/pics/11436/11436218.jpg");
icon = new ImageIcon(url);
}catch(Exception e){

}
JLabel label = new JLabel();
label.setIcon(icon);
this.add(label);
}
public void showIT(boolean visable){
if(this.isVisible() != visable)
this.setVisible(visable);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable(){
public void run(){
new SystemTrayDemo().setVisible(true);
}
});
}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值