有才华的人,别忘记给滋润你的那块土壤施肥

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  28 随笔 :: 5 文章 :: 147 评论 :: 0 Trackbacks
      明天就要离开我的第一家公司,打算先去厦门玩几天再回深圳踏去寻找新东家的漫长道路。呵,开始说正事,今天看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(200250);
        
this.setLocation(300300);
    }

    
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);
            }

        }
);
    }

}

posted on 2008-07-30 11:49 kissjava 阅读(5599) 评论(15)  编辑  收藏 所属分类: swing

评论

# re: java实现系统托盘 2008-07-30 12:18 枯宽
深圳的swing好难找工作、、、、  回复  更多评论
  

# re: java实现系统托盘 2008-07-30 15:11 隔叶黄莺
没办法啊,都说是互联网的冬天了。

你可以用我那种在博客中编排代码的样式。  回复  更多评论
  

# re: java实现系统托盘 2008-07-30 15:44 鬼狗
有个东西叫jdic, 1.6的东西也都是从这个项目发展来。
用jdic可以很容易实现系统托盘,内嵌浏览器等功能, 不需要非1.6不可。  回复  更多评论
  

# re: java实现系统托盘 2008-07-30 15:49 枯宽
@隔叶黄莺
嗯,那样挺好的。省不少空间。。  回复  更多评论
  

# re: java实现系统托盘 2008-07-30 15:54 馨雨
偶虽然看不懂
但是支持一下吧!
嘻嘻  回复  更多评论
  

# re: java实现系统托盘 2008-07-30 15:55 馨雨
加油~!^_^  回复  更多评论
  

# re: java实现系统托盘 2008-07-30 16:14 枯宽
呵呵。。没找到Unmi说的那个方法。回去再找。。把手头的忙完先  回复  更多评论
  

# re: java实现系统托盘 2008-07-31 10:59 iLinux
偶然得之物,
鼓励!  回复  更多评论
  

# re: java实现系统托盘 2008-07-31 13:22 残梦追月
问题是blogjava上的插入代码功能做不出你博客上那样的样式嘛!  回复  更多评论
  

# re: java实现系统托盘 2008-08-02 18:46 XX
恩。。好东西。。收藏了  回复  更多评论
  

# re: java实现系统托盘 2008-08-05 17:20 zarro
阿亮 ,非技术流来灌水了,呵呵!
技术讨论还是不要太水了,好吧,我会学会做
一个好菜, 有机会犒劳一下各位弟兄。  回复  更多评论
  

# re: java实现系统托盘 2008-08-05 23:03 枯宽
@zarro
好啊。努力做一个有品味的男人。哈。现在没工作,明天我也开始学做菜  回复  更多评论
  

# re: java实现系统托盘 2008-09-23 21:02 Lea
good!  回复  更多评论
  

# re: java实现系统托盘 2009-11-06 11:22 ljtat
谢谢,收获!  回复  更多评论
  

# re: java实现系统托盘 2010-03-26 21:55 苍狼
收藏了,谢谢  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: