rcp实现托盘最小化

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

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

java代码:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值