`
snoopy7713
  • 浏览: 1146789 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

在RCP中实现系统托盘功能

    博客分类:
  • 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. }   

 

 

分享到:
评论

相关推荐

    RCP系统托盘实现方法

    通过以上步骤,可以实现一个完整的RCP应用程序的系统托盘功能,使得程序在不占用桌面空间的情况下,仍然可以方便地被用户访问和控制。同时,通过右键菜单可以提供更多的操作选项,增强了用户体验。

    RCP系统开发

    - **系统托盘和定时提示**:系统托盘图标和定时气泡提示可以增强应用的用户体验,提醒用户有关信息或操作。 - **图片缓冲处理**:为了提高性能,RCP系统常使用图片缓冲技术,减少图像加载时间。 - **品牌化应用程序*...

    eclipse 3.6 rcp 开发

    - **介绍**: 在Eclipse RCP中添加系统托盘图标以提高应用的可用性。 - **实现**: 通过定义贡献点并实现IStatusLineManagerListener接口。 #### 5. 视图 - **概念**: 视图是在Eclipse RCP中用于展示数据的不同窗口。...

    Eclipse RCP详细教程

    - **插件**:在Eclipse RCP中,每个功能模块都被封装成一个独立的插件。这些插件包含了实现特定功能所需的所有代码和资源。 - **扩展**:插件可以通过扩展来增加新的功能或者改变现有功能的行为。扩展是一种动态的...

    Eclipse RCP Plug-in开发自学教程(Eclipse3.6)

    - 如何在RCP程序中添加和管理系统托盘图标及其交互。 5. **视图** - **添加示例视图**:创建基本的视图,并将其添加到RCP应用程序中。 - **添加自定义视图**:指导创建和集成自定义视图到RCP环境中。 - **向...

    eclipse RCP tutorial(中文教程)

    系统托盘是放置在屏幕右下角(Windows系统)的一个小图标区域,RCP应用程序可以通过此区域显示图标并提供快捷方式。实现系统托盘的关键步骤如下: 1. **定义托盘图标**:在插件中定义托盘图标的资源。 2. **注册托盘...

    RCP 开发自学教程

    - 在项目中定义编辑器的实现类。 - 配置插件元数据以支持该编辑器。 **6.4 调用编辑器** - **调用方式**: - 通过菜单项或其他方式启动编辑器。 **6.5 实例:文本编辑器实现** - **实现细节**: - 创建新的...

    eclipse的rcp开发

    11. **系统托盘(Tray)**:在系统托盘中添加图标,并处理相关的用户交互。 12. **闪屏(Splash Screen)**:设计和实现应用程序启动时显示的闪屏。 13. **产品绑定(Product Binding)**:创建产品的捆绑版本,包括...

    Eclipse RCP教程

    - **实现**:在Windows系统中创建系统托盘图标,提供对应用的快速访问。 #### 十九、添加状态行 ##### 20.1 设置状态行 - **状态行组件**:在主窗口底部添加状态行组件。 ##### 20.2 共享状态行 - **共享状态行**...

    Smart Client Development with RCP

    - **与桌面操作系统的紧密集成**:例如拖放(DnD)功能、系统托盘图标等。 - **易于部署和服务器集中管理**:这有助于降低总体拥有成本(TCO)。 - **利用本地文件系统和其他设备**:如打印机、读卡器等。 - **利用...

    Eclipse RCP Plugin 开发自学入门指南(CEC首发)

    4 系统托盘 ............................................................................................................................................ 37 5 视图 .........................................

    RcpChat-201301091119 更新修复有时候托盘没有图像

    这可能意味着在某些用户环境中,由于软件bug或其他系统兼容性问题,RcpChat 的图标未能正确显示在任务栏的系统托盘区域。 从标签 "RcpChat" 我们可以推测,RcpChat 是该软件的项目名称或者是产品的简称,可能是...

Global site tag (gtag.js) - Google Analytics