`
hiwings
  • 浏览: 60529 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Eclipse开发:了解RCP应用的实现

阅读更多


通过PDE的向导,用户能很容易地创建RCP 的应用,但如果要在此基础上继续扩展,则要了解RCP的组成及各部分的功能。

Plugin.xml描述 

RCP程序是基于插件架构的,所以开发RCP程序首先是开发Eclipse 插件,把用户开发的插件集成到Eclipse的内核中,共同组成RCP应用,RCP程序也是通过Plugin.xml文件描述插件的。在上一节的mail示例中,Plugin.xml文件描述了实现扩展点的几个部分,介绍如下。

(1)视图:mail应用定义了两个视图,一个为Message视图,另一个为Mailboxes视图,如以下代码所示。 
   <extension
         point="org.eclipse.ui.views">
      <view 
            name="Message" 
            allowMultiple="true" 
            icon="icons/sample2.gif" 
            class="com.free.rcp.mail.View" 
            id="com.free.rcp.mail.view">
      </view>
      <view
            name="Mailboxes"
            allowMultiple="true" 
            icon="icons/sample3.gif"
            class="com.free.rcp.mail.NavigationView" 
            id="com.free.rcp.mail.navigationView"> 
      </view> 
   </extension> 

(2)默认透视图:在mail应用中,透视图只包含了应用中定义的视图,其定义如以下代码所示。

   <extension 
         point="org.eclipse.ui.perspectives">
      <perspective 
            name="Mail Perspective"
            class="com.free.rcp.mail.Perspective" 
            id="com.free.rcp.mail.perspective"> 
      </perspective> 
   </extension>

(3)应用:RCP应用中都要实现自己的应用,如以下代码所示。 

   <extension
         id="application"
         point="org.eclipse.core.runtime.applications">
      <application> 
         <run
               class="com.free.rcp.mail.Application">
         </run>
      </application>
   </extension> 

(4)产品:可以通过产品来发布用户定义的应用,如以下代码所示。

 <extension
         id="product" 
         point="org.eclipse.core.runtime.products"> 
      <product
            application="com.free.rcp.mail.application"
            name="RCP Product">
         <property
               name="aboutText" 
               value="%aboutText"> 
         </property>
         <property 
               name="windowImages"
               value="icons/sample2.gif">
         </property>
         <property
               name="aboutImage" 
               value="product_lg.gif">
         </property>
      </product> 
  </extension> 

mail示例是一个比较完整的RCP应用,用户可以看到,mail实现了自己的视图、视角和产品的扩展点,组织应用的布局和相关的实现。下面将介绍RCP应用中所实现的功能。 

RCP应用的入口Application 

Eclipse 的运行时组件通过“org.eclipse.core.runtime.applications”扩展点找到RCP应用的入口,执行应用。应用扩展点要 实现IPlatformRunnable接口,Eclipse会执行应用实现类的run方法,代码如例程1所示。

例程1  Application.java
package com.free.rcp.mail;

import org.eclipse.core.runtime.IPlatformRunnable;
import org.eclipse.swt.widgets.Display; 
import org.eclipse.ui.PlatformUI;

public class Application implements IPlatformRunnable {

 public Object run(Object args) throws Exception {
  //得到display 
  Display display = PlatformUI.createDisplay(); 
  try { 
   //创建工作台
   int returnCode = PlatformUI.createAndRunWorkbench(display, 
    new ApplicationWorkbenchAdvisor());
   if (returnCode == PlatformUI.RETURN_RESTART) { 
    return IPlatformRunnable.EXIT_RESTART; 
   } 
   return IPlatformRunnable.EXIT_OK; 
  } finally { 
   display.dispose();
  } 
 } 
}
Application类实现了IPlatformRunnable接口,Eclipse内核会执行run方法运行应用。在run方法中,通过PlatformUI类的createAndRunWorkbench方法创建了应用的工作台。

工作台ApplicationWorkbenchAdvisor 

Application通过PlatformUI的createAndRunWorkbench创建应用的工作台,其中第二个参数为WorkbenchAdvisor,表示工作台的配置等。例如可以获得应用的视角,代码如例程2所示。

例程2  ApplicationWorkbenchAdvisor.java 
package com.free.rcp.mail;

import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchAdvisor; 
import org.eclipse.ui.application.WorkbenchWindowAdvisor;

public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {
 
 //视角ID
 private static final String PERSPECTIVE_ID = "com.free.rcp.mail.perspective";

 //创建工作台窗口 
    public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor( 
      IWorkbenchWindowConfigurer configurer) {
        return new ApplicationWorkbenchWindowAdvisor(configurer); 
    }

    //获得当前工作台的视角 
 public String getInitialWindowPerspectiveId() {
  return PERSPECTIVE_ID;
 }   

如以上代码所示,通过ApplicationWorkbenchAdvisor类的getInitialWindowPerspectiveId可以获得当前工作台的视角,通过createWorkbenchWindowAdvisor方法能创建当前工作台的窗口。 

另外,用户可以通过实现WorkbenchAdvisor类,以及重写WorkbenchAdvisor的方法,控制工作台的生命周期中每个切入点的执行方法,主要有如下的方法。

(1)工作台生命周期相关方法 

WorkbenchAdvisor类有几个方法和工作台的生命周期有关,用户能通过重写这几个方法,在工作台生命周期的某个特定点执行自己的代码,如表1所示。

 1 工作台生命周期相关方法

方 法

描 述

参 数

initialize

工作台初始化

IWorkbenchConfigurer

preStartup

 initialize 之后,工作台窗口被打开之前执行

postStartup

在所有的工作台窗口被打开之后执行

preShutdown

工作台被停止之前(窗口被关闭之前)执行

postShutdown

工作台被停止之后(窗口被关闭之后)执行

2 )消息循环相关方法

消息循环负责处理用户的输入,然后把输入分配到相关的监听器进行处理,WorkbenchAdvisor 中提供了一些钩子方法,处理消息循环的某些问题,如表2 所示。

 2 消息循环相关方法

方 法

描 述

参 数

eventLoopException

当消息循环中有未处理的异常时执行

Throwable

eventLoopIdle

当消息队列中无处理的消息时执行

Display

(3)配置相关方法 
WorkbenchAdvisor中能通过重写一些方法,实现工作台的配置,其中最常用的是getInitialWindowPerspectiveId方法,返回视角的ID。

工作台窗口ApplicationWorkbenchWindowAdvisor 

ApplicationWorkbenchAdvisor 类通过createWorkbenchWindowAdvisor方法能创建工作台窗口。通过实现WorkbenchWindowAdvisor类,用户 能定制工作台窗口的大小、状态栏、工具栏等信息,代码如例程3所示。

例程3 ApplicationWorkbenchWindowAdvisor.java

package com.free.rcp.mail;


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;


public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {

 


public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {

super(configurer);

}


//创建Action Bar

public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {

return new ApplicationActionBarAdvisor(configurer);

}


public void preWindowOpen() {

IWorkbenchWindowConfigurer configurer = getWindowConfigurer();

//设置工作台窗口的大小

configurer.setInitialSize(new Point(600, 400));

//是否显示CoolBar

configurer.setShowCoolBar(true);

//是否显示状态栏

configurer.setShowStatusLine(false);

}

}

用 户也可以通过重写WorkbenchWindowAdvisor中的方法,控制工作台窗口生命周期的执行过程。例如,上例的preWindowOpen方 法,在窗口打开直接设置窗口的大小、是否显示状态栏等属性,这些方法大多数以“pre”、“post”和“create”开始。

工作台“Action Bar”ApplicationActionBarAdvisor

Eclipse 中,“Action Bar ”是菜单、工具栏和状态栏的统称,通过ActionBarAdvisor 可以定制RCP 应用的“Action Bar ”,代码如例程4 所示。

例程4  ApplicationActionBarAdvisor.java
package com.free.rcp.mail;

/** 
 * 为了节省篇幅,所有的import类已经被注释 
 * 读者可以通过ctrl+shift+o快捷键,自动引入所依赖的类 
 * 如果有问题可发邮件到ganshm@gmail.com 
 * */
public class ApplicationActionBarAdvisor extends ActionBarAdvisor {

    private IWorkbenchAction exitAction; 
    private IWorkbenchAction aboutAction;
    private IWorkbenchAction newWindowAction;
    private OpenViewAction openViewAction; 
    private Action messagePopupAction;

    public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) { 
        super(configurer); 
    }
   
    protected void makeActions(final IWorkbenchWindow window) {
    
        //创建相应的Action 
        exitAction = ActionFactory.QUIT.create(window); 
        register(exitAction);
        
        aboutAction = ActionFactory.ABOUT.create(window); 
        register(aboutAction); 
        
        newWindowAction = ActionFactory.OPEN_NEW_WINDOW.create(window); 
        register(newWindowAction); 
       
        penViewAction = new OpenViewAction(window, "Open Another Message View", View.ID); 
        register(openViewAction); 
       
        messagePopupAction = new MessagePopupAction("Open Message", window); 
        register(messagePopupAction); 
    }
   
    protected void fillMenuBar(IMenuManager menuBar) { 
     //添加文件和帮助菜单
        MenuManager fileMenu = new MenuManager("&File", 
          IWorkbenchActionConstants.M_FILE);
        MenuManager helpMenu = new MenuManager("&Help", 
          IWorkbenchActionConstants.M_HELP);
        
        menuBar.add(fileMenu); 
        // Add a group marker indicating where action set menus will appear. 
        menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
        menuBar.add(helpMenu); 
        
        //添加文件菜单的Action 
        fileMenu.add(newWindowAction);
        fileMenu.add(new Separator());
        fileMenu.add(messagePopupAction);
        fileMenu.add(openViewAction);
        fileMenu.add(new Separator()); 
        fileMenu.add(exitAction); 
       
        //添加帮助菜单的Action 
        helpMenu.add(aboutAction);
    }
   
    protected void fillCoolBar(ICoolBarManager coolBar) {
     //添加CoolBar
        IToolBarManager toolbar = new ToolBarManager(SWT.FLAT | SWT.RIGHT);
        //添加ToolBar到CoolBar中
        coolBar.add(new ToolBarContributionItem(toolbar, "main"));   
        //添加Action到ToolBar中 
        toolbar.add(openViewAction); 
        toolbar.add(messagePopupAction); 
    }

以上程序通过makeActions方法创建了所有的Action,通过fillMenuBar方法添加了文件菜单和帮助菜单,通过fillCoolBar方法添加了CoolBar工具栏项。菜单和工具栏共用相关的Action。 

RCP应用的透视图(perspective)

WorkbenchAdvisor 中getInitialWindowPerspectiveId方法是一个抽象方法,也就是说要通过WorkbenchAdvisor创建工作台,用户必 须实现自己的透视图(也可以是Eclipse中现有的视角)。工作台会通过getInitialWindowPerspectiveId方法得到透视图扩 展点的ID,并用此透视图对视图布局。本例中透视图的实现代码如例程5所示。

例程5  Perspective.java 
package com.free.rcp.mail;

import org.eclipse.ui.IFolderLayout;
import org.eclipse.ui.IPageLayout; 
import org.eclipse.ui.IPerspectiveFactory;

public class Perspective implements IPerspectiveFactory {

 public void createInitialLayout(IPageLayout layout) {
  String editorArea = layout.getEditorArea(); 
  //设置编辑区域不可见
  layout.setEditorAreaVisible(false); 
  
  //添加视图
  layout.addStandaloneView(NavigationView.ID,  
    false, IPageLayout.LEFT, 0.25f, editorArea); 
  //添加Folder,并在Folder中添加视图
  IFolderLayout folder = layout.createFolder("messages",
    IPageLayout.TOP, 0.5f, editorArea);
  folder.addPlaceholder(View.ID + ":*");
  folder.addView(View.ID);
   
  //设置NavigationView视图不可关闭
  layout.getViewLayout(NavigationView.ID).setCloseable(false); 
 }
}

在Perspective视角中设置了编辑区域不可见,并添加了两个视图,其中messages视图放在一个Folder中,在此Folder中还能添加其他的视图,最后通过setCloseable方法设置NavigationView视图是不可关闭的。 

在此,视图和其他扩展点的实现就不介绍了,读者可以参考源代码了解mail应用的实现。

RCP是Eclipse 3.0以后发展起来的,目的在于以Eclipse平台为框架,开发出基于Java 的独立运行的应用。可以断言,随着Eclipse开发的不断深入和广为用户接受,RCP程序将会在Java的桌面应用中占据一席之地。

分享到:
评论

相关推荐

    ECLIPSE+RCP应用系统开发方法与实战(PDF 高岗著)

    《ECLIPSE+RCP应用系统开发方法与实战》这本书是高岗先生关于使用Eclipse RCP(Rich Client Platform)进行应用系统开发的一本实战指南。Eclipse RCP是Eclipse IDE的一部分,它提供了一个框架,使得开发者可以构建...

    eclipse rcp应用系统开发方法与实战源代码.zip

    在"eclipse rcp应用系统开发方法与实战源代码.zip"中,我们可以学习到以下关键知识点: 1. **Eclipse RCP架构**:理解Eclipse RCP的基础架构非常重要,包括插件(Plugins)、工作台(Workbench)、视图(Views)、...

    ECLIPSE+RCP应用系统开发方法与实战

    非常好的一本JAVA RCP入门实战的书,兼顾理论和实战。

    eclipse插件开发: rcp/swt相关资料

    10. **发布和部署**:了解如何打包和发布Eclipse插件,包括创建更新站点和生成可执行的RCP应用。 掌握以上知识点,并通过实际项目练习,开发者可以熟练地进行Eclipse插件开发,利用RCP和SWT构建出高效、美观且功能...

    Eclipse RCP 应用系统开发方法与实战

    Eclipse Rich Client Platform (RCP) 是一个...通过深入学习"Eclipse RCP 应用系统开发方法与实战",开发者不仅可以掌握构建复杂桌面应用的技能,还能了解到如何利用Eclipse RCP的灵活性和强大功能来满足各种定制需求。

    EclipseRCP教程

    Eclipse RCP(Rich Client Platform)是一种基于 Eclipse 平台的客户端开发技术,能够帮助开发者快速构建功能强大且界面美观的桌面应用程序。在本教程中,我们将详细介绍 Eclipse RCP 的开发过程、技术要点和注意...

    开发您的第一个 Eclipse RCP 应用程序

    ### 开发您的第一个 Eclipse RCP 应用程序 #### 富客户端平台 (RCP) 概述 **Eclipse Rich Client Platform (RCP)** 是一个强大的框架,旨在利用 Eclipse 平台来构建非集成开发环境 (IDE) 类型的最终用户应用程序。...

    使用Eclipse RCP进行桌面程序开发

    通过以上步骤,您可以创建一个基础的Eclipse RCP应用,并为其添加菜单、工具栏和简单的对话框功能。随着对RCP框架的深入了解,您还可以进一步探索更多的高级特性和功能,如视图、编辑器和透视图等,从而开发出更为...

    Eclipse-4-RCP教程

    为了开始开发Eclipse RCP应用,首先需要下载并安装Eclipse SDK(Software Development Kit),该套件包含了创建Eclipse RCP应用程序所需的所有工具和文档。 - **官方网站**:访问Eclipse官方网站下载最新版本的SDK...

    eclipse rcp 开发基础教程

    10. **Extension Points**:这是Eclipse插件系统的关键特性,允许开发者通过定义和实现扩展点来扩展Eclipse RCP应用程序的功能。 11. **Testing and Debugging**:Eclipse RCP提供了强大的测试和调试工具,如JUnit...

    [基于Eclipse.RCP的复合应用开发].扈晓炜等.扫描版

    这本书可能涵盖了如何使用Eclipse RCP进行应用程序设计、开发、调试和部署的全过程,包括创建插件、定义视图和编辑器、实现MVC模式、配置工作台和透视图、利用服务和扩展点进行集成、以及打包和发布RCP应用程序等...

    Eclipse4 RCP桌面应用开发教程

    Eclipse4的插件开发教程比较少,之前搜索到的基本是eclipse官网的全英文版本,可能现在做桌面应用的没那么多,搜索到的都是多年前的资料。英文的看的比较吃力,分享一个中文的,部分内容还是有英文,大部分都已经...

    eclipse.rcp应用系统开发方法与实战(含源码)

    在"eclipse.rcp应用系统开发方法与实战(含源码)"中,我们可以深入学习如何利用Eclipse RCP构建实际的业务应用。该资源特别强调了如何将Hibernate ORM框架与Eclipse RCP相结合,以处理数据库操作。Hibernate是一个...

    Eclipse RCP应用系统开发方法与实战(第四章)

    在“Eclipse RCP应用系统开发方法与实战(第四章)”中,我们将深入探讨如何利用这个平台进行高效且灵活的应用程序开发。本章节主要关注的是实战经验与具体实现步骤,旨在帮助开发者掌握Eclipse RCP的核心概念和技术...

    eclipse rcp应用系统开发方法与实战

    本项目“Eclipse RCP应用系统开发方法与实战”旨在深入探讨如何利用Eclipse RCP进行软件开发,通过实践案例来提升开发者的技术能力和实践经验。 Eclipse RCP的核心特点包括模块化、可扩展性和高度定制性。模块化...

    Eclipse的RCP开发的入门教程

    最后,"使用Eclipse RCP进行桌面程序开发(六):向OpenGL进军.doc"将带领开发者进入更高级的主题,即如何在RCP应用中集成OpenGL,实现高性能的3D图形渲染。这对于需要强大图形处理能力的应用来说是至关重要的。 ...

    eclipse-rcp开发培训PPT

    通过这个Eclipse RCP开发培训PPT,你将能够掌握构建RCP应用的基本技能,从设计、编码到测试,全面了解Eclipse RCP开发的各个环节。继续深入学习和实践,你将能够构建出功能强大、用户体验优秀的桌面应用。

    eclipse plug-in/rcp 开发方法详解03

    - 使用Eclipse IDE本身来开发Eclipse插件和RCP应用,利用"Plug-in Development Environment"(PDE)工具集。 - PDE提供模板、向导和调试工具,简化了插件和RCP应用的创建过程。 4. **工作台(Workbench)**: - ...

Global site tag (gtag.js) - Google Analytics