`
longgangbai
  • 浏览: 7331230 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

RCP 应用程序添加托盘代码

阅读更多

        在一个rcp应用程序中添加托盘的代码如下:

 

   添加托盘的代码如下:

   

package com.vnvntrip.plugin.dev.views.custom;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tray;
import org.eclipse.swt.widgets.TrayItem;
import org.eclipse.ui.PlatformUI;

import com.vnvntrip.plugin.dev.commons.ImageManager;
/**
 * RCP  项目程序的托盘实现类
 * @author longgangbai
 *
 */
public class SystemTrayMaster  implements SelectionListener ,Listener{
    
    private Menu menu;
    private MenuItem[] menuItems=new MenuItem[0];
    private RestoreWindowListener restoreWindowListener;
    
    public SystemTrayMaster(){
	restoreWindowListener=new RestoreWindowListener();
    }
    /**
     * 关闭应用程序
     */
    protected void closeApplication(){
	 PlatformUI.getWorkbench().close();
    }

    private final class RestoreWindowListener extends SelectionAdapter{
	  @Override
	    public void widgetDefaultSelected(SelectionEvent e) {
	      restoreWindow();
	    }
    }
    
    
    public void restoreWindow(){
	  Shell shell=getShell();
	  shell.open();
	  shell.setMinimized(false);
	  shell.forceActive();
	  shell.forceFocus();
    }
    /**
     * 清除菜单所占的资源
     */
    public void clearItems()
    {
	for (MenuItem menuItem : menuItems) {
	    menuItem.removeSelectionListener(restoreWindowListener);
	    menuItem.dispose();
	}
    }
    
    /**
     * 显示菜单的方法
     */
    public void showMenu(){
	clearItems();
	MenuItem openItem=new MenuItem(menu,SWT.PUSH);
	MenuItem closeItem=new MenuItem(menu,SWT.NONE);
	closeItem.setText("关闭");
	closeItem.addSelectionListener(new SelectionListener(){
	    public void widgetDefaultSelected(SelectionEvent e) {
	    }
	    public void widgetSelected(SelectionEvent e) {
		closeApplication();
	    }
	});
	
	menuItems=new MenuItem[]{openItem,closeItem};
	openItem.setText("激活");
	openItem.addSelectionListener(restoreWindowListener);
	menu.setVisible(true);
    }
  
  
   /**
    * 点击托盘的操作
    */
    public void widgetSelected(SelectionEvent e) {
	
    }
    
    /**
     * 处理的应用
     */
    public void handleEvent(Event e) {
	showMenu();
    }


    /**
     * 双击托盘时的操作
     */
    public void widgetDefaultSelected(SelectionEvent e) {
	restoreWindow();
    }
    /**
     * 获取系统个shell
     * @return
     */
    private Shell getShell(){
	 return PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
    }
    /**
     * 图片最小化的操作
     */
    public void minimizeWindow(){
	 getShell().setMinimized(true);
	 getShell().setVisible(false);
    }
    
    /**
     * 创建托盘方法
     */
    public void createSystemTray(){
          Tray tray=Display.getDefault().getSystemTray();
          TrayItem item=new TrayItem(tray,SWT.NONE);
          item.setText("rcp系统");
          item.setToolTipText("rcp系统");
          Image image=ImageManager.getImage("QQRCP");
          //PlatformUI.getWorkbench().
         // getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
          item.setImage(image);
          item.addSelectionListener(this);
          item.addListener(SWT.MenuDetect, this);
          menu=new Menu(getShell(),SWT.POP_UP);
    }    
    
    

}

 

 

 

在ApplicationWorkbenchWindowAdvisor类中添加创建托盘的方法:

 

 

package com.vnvntrip.plugin.dev;

import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;

import com.vnvntrip.plugin.dev.views.custom.SystemTrayMaster;
/**
 * rcp的workbenchWindow ,隶属于当前的workbench,可以有多个workbechWindow.
 * 
 * 
 * 在rcp的workbenchWindowAdvisor的postWidowOpen()中创建一个系统托盘,另外要
 * 重写ovveride divWindowShellClose()方法,否则按程序右上角的x,整个程序会被关闭,
 * 重写实现程序最小化的功能
 * @author longgangbai
 *
 */
public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {

    private SystemTrayMaster trayMaster;
    
    public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
        super(configurer);
    }

    public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
        return new ApplicationActionBarAdvisor(configurer);
    }
    
    /**
     * 
     */
    @Override
    public void preWindowOpen() {
        IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
        configurer.setInitialSize(new Point(600, 400));
        //设置显示工具栏
        configurer.setShowCoolBar(true);
        configurer.setShowStatusLine(false);
        configurer.setTitle("RCP 技术开发记事本");
    }
    
    
    
    /**
     * 设置窗体最大化
     */
    @Override
    public void postWindowOpen() {
        super.postWindowOpen();
	IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
        configurer.getWindow().getShell().setMaximized(true);
        createSystemTray();
        
    }
    /**
     * 创建托盘的信息
     */
    private void createSystemTray(){
	trayMaster=new SystemTrayMaster();
	trayMaster.createSystemTray();
    }
    /**
     * 此方法必须重写应用
     * @return
     */
    public boolean divWindowShellClose(){
	trayMaster.minimizeWindow();
	return false;
    }
    
    
}

 

 

  希望大家拍砖!!!

 

分享到:
评论

相关推荐

    eclipse的rcp开发

    教程中提到了一个实例,它可能包含一个简单的RCP应用程序的代码和运行示例。通过这些实例,开发者能够更直观地了解如何使用上述组件构建应用程序。 ### 注意事项 - RCP应用程序的开发涉及到对Eclipse插件和扩展点的...

    RCP系统托盘实现方法

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

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

    - **程序VS产品**:区分程序与产品的概念,产品是RCP应用程序的打包形式,包含特定的配置和依赖。 - **维护LAUNCH配置**:学习如何管理和修改程序的启动配置。 - **可能的APPLICATION ID 错误**:解释应用程序ID...

    eclipse RCP tutorial(中文教程)

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

    Eclipse RCP详细教程

    在Eclipse RCP中,应用程序是由一系列插件组成的,每个插件都可以独立地进行开发、部署和更新。 Eclipse RCP的核心特性之一是它的灵活性和可扩展性。这种灵活性体现在多个方面,例如通过插件机制可以轻松地添加新...

    Eclipse RCP教程

    - **定义**:Eclipse RCP(Rich Client Platform)是一种基于Java的框架和技术集合,允许开发者构建灵活且可扩展的桌面应用程序。 - **目标**:通过提供强大的插件体系结构和支持工具,帮助开发人员构建高度可定制的...

    RCP 开发自学教程

    - **RCP**: 强调的是整体框架,用于构建可扩展的应用程序。 - **PLUGIN**: 单个功能模块,可以被其他插件引用或扩展。 #### 二、创建第一个RCP程序 **2.1 创建一个RCP程序** - **步骤**: 1. 在Eclipse IDE中创建...

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

    的用法,向一个 RCP应用程序产品中添加标志和帮助。 每一章都基本独立于其他章节。 目录 1 富客户端平台 ......................................................................................................

    Eclipse_Swt_Jface_核心应用_部分19

    15.2 应用程序窗口ApplicationWindow类 292 15.3 带有菜单栏的主程序窗口 293 15.3.1 简单写字板程序示例 293 15.3.2 添加菜单栏的基本步骤 297 15.3.3 创建菜单项 297 15.3.4 菜单项的事件处理 298 ...

Global site tag (gtag.js) - Google Analytics