在RCP中实现系统托盘功能

在RCP中实现系统托盘功能

在RCP中加入系统托盘功能,类似msn和QQ。

功能就不说了。

在RCP的WorkbenchWindowAdvisor的postWindowOpen()中创建系统托盘,另外要override preWindowShellClose()方法(按窗口右上角X关闭),否则按程序右上角的X,整个程序就会被关闭,重写后实现程序最小化的功能。

主要是重载ApplicationWorkbenchWindowAdvisor.java中的方法

Java代码   收藏代码
  1. /**  
  2.  * ApplicationWorkbenchWindowAdvisor.java  
  3.  */   
  4. package  com.mi.pwdgate;  
  5.   
  6. import  org.eclipse.swt.graphics.Point;  
  7. import  org.eclipse.ui.IWorkbenchPreferenceConstants;  
  8. import  org.eclipse.ui.PlatformUI;  
  9. import  org.eclipse.ui.application.ActionBarAdvisor;  
  10. import  org.eclipse.ui.application.IActionBarConfigurer;  
  11. import  org.eclipse.ui.application.IWorkbenchWindowConfigurer;  
  12. import  org.eclipse.ui.application.WorkbenchWindowAdvisor;  
  13.   
  14. import  com.mi.pwdgate.util.SystemTrayMaster;  
  15.   
  16. public   class  ApplicationWorkbenchWindowAdvisor  extends  WorkbenchWindowAdvisor {  
  17.   
  18.   private  SystemTrayMaster trayMaster;  
  19.   /*  
  20.    * (non-Javadoc)  
  21.    *   
  22.    * @see org.eclipse.ui.application.WorkbenchWindowAdvisor#postWindowOpen()  
  23.    */   
  24.   public   void  postWindowOpen() {  
  25.     createSystemTray();  
  26.   }  
  27.   
  28.   private   void  createSystemTray() {  
  29.     trayMaster = new  SystemTrayMaster();  
  30.     trayMaster.createSystemTray();  
  31.   }  
  32.   
  33.         /*  
  34.      * (non-Javadoc)  
  35.      * @see org.eclipse.ui.application.WorkbenchWindowAdvisor#preWindowShellClose()  
  36.      * <span style="color: #ff0000;">按窗口右上角X关闭</span>  
  37.  
  38.  
  39.      */   
  40.     public   boolean  preWindowShellClose() {  
  41.         System.out.println("shell going to closed!" );  
  42.         trayMaster.minimizeWindow();  
  43.         return   false ;  
  44.     }  
  45.       
  46.     /*  
  47.      * (non-Javadoc)  
  48.      * @see org.eclipse.ui.application.WorkbenchWindowAdvisor#postWindowClose()  
  49.      * <span style="color: #ff0000;">所有关闭窗口的事件都从这里走,收尾工作的代码在这里写</span>  
  50.  
  51.  
  52.      */   
  53.     public   void  postWindowClose() {  
  54.         System.out.println("closed!" );  
  55.     }  
  56.   
  57. }  
  58.   
  59. /**  
  60.  * SystemTrayMaster.java  
  61.  */   
  62. package  com.mi.pwdgate.util;  
  63.   
  64. import  org.eclipse.swt.SWT;  
  65. import  org.eclipse.swt.events.SelectionAdapter;  
  66. import  org.eclipse.swt.events.SelectionEvent;  
  67. import  org.eclipse.swt.events.SelectionListener;  
  68. import  org.eclipse.swt.graphics.Image;  
  69. import  org.eclipse.swt.widgets.Display;  
  70. import  org.eclipse.swt.widgets.Event;  
  71. import  org.eclipse.swt.widgets.Listener;  
  72. import  org.eclipse.swt.widgets.Menu;  
  73. import  org.eclipse.swt.widgets.MenuItem;  
  74. import  org.eclipse.swt.widgets.Shell;  
  75. import  org.eclipse.swt.widgets.Tray;  
  76. import  org.eclipse.swt.widgets.TrayItem;  
  77. import  org.eclipse.ui.PlatformUI;  
  78.   
  79. /**  
  80.  * @author moneyice 2006-5-9  
  81.  */   
  82. public   class  SystemTrayMaster  implements  SelectionListener, Listener {  
  83.   private   final   class  RestoreWindowListener  extends  SelectionAdapter {  
  84.     public   void  widgetSelected(SelectionEvent e) {  
  85.       restoreWindow();  
  86.     }  
  87.   }  
  88.   
  89.   private  Menu menu;  
  90.   
  91.   private  MenuItem[] menuItems =  new  MenuItem[ 0 ];  
  92.   
  93.   private  RestoreWindowListener restoreWindowListener;  
  94.   
  95.   public  SystemTrayMaster() {  
  96.     this .restoreWindowListener =  new  RestoreWindowListener();  
  97.   }  
  98.   
  99.   // Closes the Application   
  100.   protected   void  closeApplication() {  
  101.     PlatformUI.getWorkbench().close();  
  102.   }  
  103.   
  104.   // click the tray   
  105.   public   void  widgetSelected(SelectionEvent e) {  
  106.   }  
  107.   
  108.   // double click the tray   
  109.   public   void  widgetDefaultSelected(SelectionEvent e) {  
  110.     restoreWindow();  
  111.   }  
  112.   
  113.   // Gets system shell   
  114.   private  Shell getShell() {  
  115.     return  PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();  
  116.   }  
  117.   
  118.   // Minimizes the Window   
  119.   public   void  minimizeWindow() {  
  120.     getShell().setMinimized(true );  
  121.     getShell().setVisible(false );  
  122.   }  
  123.   
  124.   // Restores the window   
  125.   protected   void  restoreWindow() {  
  126.     Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow()  
  127.         .getShell();  
  128.     shell.open();  
  129.     shell.setMinimized(false );  
  130.     shell.forceActive();  
  131.     shell.forceFocus();  
  132.   }  
  133.   
  134.   public   void  showMenu() {  
  135.     clearItems();  
  136.     MenuItem openItem;  
  137.     MenuItem closeItem;  
  138.     openItem = new  MenuItem( this .menu, SWT.PUSH);  
  139.     closeItem = new  MenuItem( this .menu, SWT.NONE);  
  140.     closeItem.setText("Close" );  
  141.     closeItem.addSelectionListener(new  SelectionAdapter() {  
  142.       public   void  widgetSelected(SelectionEvent e) {  
  143.         closeApplication();  
  144.       }  
  145.     });  
  146.     this .menuItems =  new  MenuItem[] { openItem, closeItem };  
  147.   
  148.     openItem.setText("Open Password Gate" );  
  149.     openItem.addSelectionListener(this .restoreWindowListener);  
  150.     this .menu.setVisible( true );  
  151.   }  
  152.   
  153.   private   void  clearItems() {  
  154.     for  ( int  i =  0 ; i <  this .menuItems.length; i++) {  
  155.       MenuItem item = this .menuItems[i];  
  156.       item.removeSelectionListener(this .restoreWindowListener);  
  157.       this .menuItems[i].dispose();  
  158.     }  
  159.   }  
  160.   
  161.   public   void  handleEvent(Event event) {  
  162.     showMenu();  
  163.   }  
  164.   
  165.   public   void  createSystemTray() {  
  166.     // Gets system tray   
  167.     Tray tray = Display.getDefault().getSystemTray();  
  168.     // Creates tray item   
  169.     TrayItem item = new  TrayItem(tray, SWT.NONE);  
  170.     item.setText("Password Gate" );  
  171.     item.setToolTipText("Password Gate" );  
  172.     // Sets image for tray   
  173.     Image image = ImageShop.get("default" );  
  174.     item.setImage(image);  
  175.   
  176.     item.addSelectionListener(this );  
  177.     item.addListener(SWT.MenuDetect, this );  
  178.   
  179.     menu = new  Menu(getShell(), SWT.POP_UP);  
  180.   }  
  181. }   

 

猜你喜欢

转载自marsvaadin.iteye.com/blog/1463179
今日推荐