有才華的人,別忘記給滋潤你的那塊土壤施肥

            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 閱讀(5653) 評論(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 蒼狼
          收藏了,謝謝  回復  更多評論
            

          主站蜘蛛池模板: 靖西县| 贵南县| 东乌珠穆沁旗| 乌鲁木齐市| 无锡市| 宝山区| 东乡县| 神农架林区| 小金县| 淅川县| 远安县| 芜湖市| 当涂县| 巢湖市| 阿拉善盟| 宜兰县| 铜梁县| 芜湖市| 大邑县| 新郑市| 锡林郭勒盟| 武清区| 淳安县| 天峻县| 宜州市| 横山县| 罗源县| 武鸣县| 新巴尔虎左旗| 栖霞市| 日照市| 建阳市| 临澧县| 拉孜县| 名山县| 临沂市| 兰西县| 竹北市| 万源市| 东海县| 鹤岗市|