`
wuhua
  • 浏览: 2110511 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论
阅读更多
      这篇文章基本上是没怎么加我自己写的代码的,几乎全部是eclipse生成的,本人只是拿这个例子来说说自己的认识,所以里面很多错误,看了就把它忘记吧。建议到网站找资料,我想更适合你。

最近发现rcp的资料越来越多,而自己有处于比较有空的状态,所想写一篇完整的Rcp教程,由于我也是初学,所以写出来的很多东西可能都是错的,所以建议参考一些资料:<o:p></o:p>

http://www.eclipse.org/home/categories/rcp.php Eclipse Rcp的官方网站。<o:p></o:p>

http://www-128.ibm.com/developerworks/cn/opensource/top-projects/eclipse.html  IBM网站 Eclispe的帮助文档。<o:p></o:p>

上面的文档足以帮助我们这些初学者入门。<o:p></o:p>

<!----> <!----><o:p></o:p>

下面我将以一篇管理用户的例子来体验RCP的美妙,此程序基于(jdk1.5+eclipse3.2)。<o:p></o:p>

一.创建序基本框架<o:p></o:p>

二.分析RCP的结构<o:p></o:p>

三.添加程序功能<o:p></o:p>

四.建立数据modeldaoserviceaction<o:p></o:p>

五.测试<o:p></o:p>

六.打包

一.    序基本框架,我想Eclipse这点做的是很贴心的,在创建程序框架的时候选择Email Template。并输入项目名称org.wuhua.rcp。然后点下一步就行了。这样我们创建了带菜单,工具条等基本模板。


上面的模板我想基本上是适合我们的程序的,不过我们要改进下它们,比如菜单,工具条,跟左侧树状菜单,这些是我们要改进的,我们要让它们符合我们的需求。

二.    哇,上面的框架好漂亮啊。Eclipse是怎么做出来的。程序是怎么启动的?我怎么没有找到main方法呢?java不是要求从main启动的吗?那些图片,菜单,工具条,视图是怎么构建的呢?跟Swing,awt有区别吗?
带这这些问题我们来看看那些源代码是怎么工作的?
我们将三步来学习这些东西:
1,    插件清单――plugin.xml,MANIFEST.MF(OSGI绑定),build.properties。
2,    java代码――Perspective,ActionBarAdvisor, WorkbenchAdvisor,Application<o:p></o:p>

<!----> <o:p></o:p>

插件清单的学习:重点RCP程序也是一个插件,但跟插件又有点不同(它有自己独立的工作台,有自己独立的透视图,透视图在程序启动时候启动(可以自己指定相关的透视图实现)。要注意的是在相同的时间里只能存在一个透视图),我认为普通插件是构建在Eclipse的工作台之上的,说白了就是插件要依赖与Eclipse来工作,而RCP则可独立运行――纯粹个人观点。<o:p></o:p>

在创建了插件项目之后,需要创建透视图,创建透视图是一个两阶段的过程。首先,修改插件的清单以包含新的扩展,该扩展将使用 org.eclipse.ui.perspectives 扩展点。其次,使用来自新扩展点的属性创建一个透视图类。根据关于扩展和扩展点的早期讨论,AutoTest应用程序的插件清单已经包括下列扩展:<o:p></o:p>

  <extension></extension><o:p></o:p>

         point="org.eclipse.ui.perspectives"><o:p></o:p>

      <perspective></perspective> <o:p></o:p>

            name="Autotest Perspective"<o:p></o:p>

            class="org.wuhua.autotest.ui.Perspective"<o:p></o:p>

            id="org.wuhua.autotest.perspective"><o:p></o:p>

      <o:p></o:p>

  <o:p></o:p>

<perspective></perspective> 元素具有下列属性:<o:p></o:p>

  • id —— 该属性为透视图定义了一个惟一标识符。 <o:p></o:p>
  • name —— 该属性为透视图定义了一个名称,工作台窗口菜单栏将使用它来表示该透视图。 <o:p></o:p>
  • class —— 该属性包含实现 org.eclipse.ui.IPerspectiveFactory 接口的类的完全限定名。 <o:p></o:p>

<o:p></o:p>

上面是对透视图插件清单的定义,现在我们看下,透视图在java代码中是怎么样构建的,是怎么样显示到桌面?看看下面的代码<o:p></o:p>

java 代码
 
  1. public class Perspective implements IPerspectiveFactory {  
  2.     public void createInitialLayout(IPageLayout layout) {  
  3.     }  
  4. }  

IperspectiveFactory指定一个创建透视图接口,我们只需要实现它即可。程序会在启动的时候加载这个类,具体是通过plugin.xml里面的扩展点:
<extension></extension> point="org.eclipse.ui.perspectives">――个人认为:我们可以把RCP启动框架OSGI相当于Spring IOC容器,通过配置文件加载并管理各个方面的资源。<o:p></o:p>

<!----> <!----><o:p></o:p>

具体创建透视图的方法是:


java 代码
 
  1. public void createInitialLayout(IPageLayout layout) {  
  2.     String editorArea = layout.getEditorArea();  
  3.         layout.setEditorAreaVisible(false);  
  4.           
  5.         layout.addStandaloneView(NavigationView.ID,  false, IPageLayout.LEFT, 0.25f, editorArea);  
  6.         IFolderLayout folder = layout.createFolder("messages", IPageLayout.TOP, 0.5f, editorArea);  
  7.         folder.addPlaceholder(View.ID + ":*");  
  8.         folder.addView(View.ID);  
  9.           
  10.         layout.getViewLayout(NavigationView.ID).setCloseable(false);  
  11. }  

 

我们可以在里面部署我们的透视图,比如透视图开始位置,大小,是否可见等――系统通过传入IpageLayout 对象,然后通过这个对象来实现上面的功能。<o:p></o:p>

介绍 WorkbenchAdvisor<o:p></o:p>

前面集中讨论了构成 RCP 应用程序的各种组件。接下来将集中讨论如何将所有的事物结合到一起。在构建 RCP 应用程序时,核心任务之一就是创建一个实现抽象类 org.eclipse.ui.application.WorkbenchAdvisor 的类。WorkbenchAdvisor 类负责配置工作台,当执行 RCP 应用程序时,将显示该工作台。<o:p></o:p>

WorkbenchAdvisor 类包含下列方法,从而为开发人员提供了对普通工作台的生命周期的访问:<o:p></o:p>

  • initialize —— 应该在显示任何窗口之前首先调用该方法。 <o:p></o:p>
  • preStartup —— 其次执行的就是这个方法,但它的调用是在第一个窗口打开之前。在启动或者恢复期间暂时禁用某些项时,该方法非常有用。 <o:p></o:p>
  • postStartup —— 对该方法的调用是执行的第三个操作,它的调用是在第一个窗口打开之后,可以用该方法重新启用 preStartup 方法中临时禁用的项。 <o:p></o:p>
  • postRestore —— 该方法的调用是在已经根据以前保存的状态重新创建工作台及其窗口之后。 <o:p></o:p>
  • preShutdown ——该方法的调用是在事件循环已经终止,任何窗口尚未关闭之前。 <o:p></o:p>
  • postShutdown ——这是最后一个方法,它在事件循环终止之后被调用。 <o:p></o:p>

WorkbenchAdvisor 类包含下列方法,以便为开发人员提供对工作台窗口生命周期的访问: <o:p></o:p>

  • preWindowOpen —— 在打开每个窗口时调用该方法。 <o:p></o:p>
  • fillActionBars —— 在调用 preWindowOpen 方法之后调用该方法,可以使用它配置窗口的动作栏。 <o:p></o:p>
  • postWindowRestore —— 在根据以前保存的状态重新创建窗口之后调用该方法。 <o:p></o:p>
  • postWindowOpen —— 在已经打开一个窗口之后调用该方法。可以使用该方法注册任何窗口监听器。 <o:p></o:p>
  • preWindowShellClose —— 在用户关闭窗口外壳时调用该方法。 <o:p></o:p>

WorkbenchAdvisor 类包含下列方法,以便为开发人员提供对工作台事件循环的访问。<o:p></o:p>

  • eventLoopException —— 可以调用该方法处理事件循环崩溃的异常。 <o:p></o:p>
  • eventLoopIdle —— 在没有更多的事件需要处理的时候调用该方法。<o:p></o:p>

<!----> <!----><o:p></o:p>

WorkbenchAdvisor 是个非常重要的类,它负责配置整个工作台,一个Rcp程序只能存在一个WorkbenchAdvisor(工作台)实例,但可以存在多个WorkbenchWindowAdvisor实例(工作窗口,相当于打开新窗口)。<o:p></o:p>

现象来详细看下WorkbenchWindowAdvisorWorkbenchAdvisor是通过创建WorkbenchWindowAdvisor来实现工作台的配置的,当然也可以不这么做。它也可以自己创建。但我觉得通过WorkbenchWindowAdvisor创建更灵活而且给人感觉更舒服。<o:p></o:p>

ActionBarAdvisor 这个类是我们用来定制菜单,工具条等。它的方法解释如下<o:p></o:p>

protected void makeActions(final IWorkbenchWindow window) {<o:p></o:p>

 //在这里可以通过窗口来定制action,比如文件中的打开,关闭,推出等action。<o:p></o:p>

}<o:p></o:p>

protected void fillMenuBar(IMenuManager menuBar) {<o:p></o:p>

  //定制菜单 <o:p></o:p>

}<o:p></o:p>

<!----> <!----><o:p></o:p>

Application Rcp核心类,根据API说明,此类是RCP启动的Main类,里面的run方法相当于普通java程序的main方法。通常这个类是建立RCP应用程序生成,代码结构基本不用去修改。<o:p></o:p>

java 代码
 
  1. Display display = PlatformUI.createDisplay();  
  2.         try {  
  3.             int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());  
  4.             if (returnCode == PlatformUI.RETURN_RESTART) {  
  5.                 return IPlatformRunnable.EXIT_RESTART;  
  6.             }  
  7.             return IPlatformRunnable.EXIT_OK;  
  8.         } finally {  
  9.             display.dispose();  
  10.         }  

我们可以很清楚的知道,线程会在PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());这里不挺的运行,直到程序崩溃或者用户退出才会返回。<o:p></o:p>

<!----> <!----><o:p></o:p>

恩。我想我基本上知道rcp是怎么运行的了,我对主管说?<o:p></o:p>

那好啊。你总结下,它是怎么运行的。<o:p></o:p>

首先通过plugin.xml文件配置rcp的各个方面,比如扩展点,需求包等。这个文件就好像spring的bean配置文件,告诉了容器上下文。<o:p></o:p>

“我说的对不对啊,主管。”我跟主管说。<o:p></o:p>

“那MANIFEST.MF这个文件的用途是什么呢?”主管说。<o:p></o:p>

我查查啊。噢,原来是跟OSGI有关的啊,在xx版本的esplise以前,plugin.xml做了全部工作,后来改进了。把一些工作放到MANIFEST.MF这个文件来了。我想它主要对OSGI框架运行的元数据包装吧,比如定义RCP的运行环境跟依赖项目(有可能是插件)。<o:p></o:p>

<!----> <!----><o:p></o:p>

对了我们基本上算是了解了RCP的一些基本只是,我现在想了解下,我点击那些菜单的时候为什么会有反映的,它是怎么做到的?<o:p></o:p>

那么我们试验下吧。经过查找API我们发现了Iaction,字面上怎么跟webwork的action差不多啊。因为根据名称我们知道action具体是做什么的。它也是一个Command模式的经典应用吗?<o:p></o:p>

我想是的。看看它的方法<o:p></o:p>

java 代码
 
  1. public void run() {  
  2.         MessageDialog.openInformation(window.getShell(), "Open""Open Message Dialog!");  
  3.     }  
  4. }  

这就更清楚了。我们只要继承Action并覆盖它的run方法就可以实现点击的动作了。哈哈。Eclispe我太喜欢你了,<o:p></o:p>

好我们自己来定义实现一个Action吧。<o:p></o:p>


java 代码
 
  1. public class MessagePopupAction extends Action {  
  2.   
  3.     private final IWorkbenchWindow window;  
  4.   
  5.     MessagePopupAction(String text, IWorkbenchWindow window) {  
  6.         super(text);  
  7.         this.window = window;  
  8.         // The id is used to refer to the action in a menu or toolbar  
  9.         setId(ICommandIds.CMD_OPEN_MESSAGE);  
  10.         // Associate the action with a pre-defined command, to allow key bindings.  
  11.         setActionDefinitionId(ICommandIds.CMD_OPEN_MESSAGE);  
  12.         setImageDescriptor(org.wuhua.rcp.Activator.getImageDescriptor("/icons/sample3.gif"));  
  13.     }  
  14.   
  15.     public void run() {  
  16.         MessageDialog.openInformation(window.getShell(), "Open""Open Message Dialog!");  
  17.     }  
  18. }  

 

上面只是我对rcp一点认识,如果要想设计好rcp我觉得除了对这些基本知识要有了解外,对swt/jface也是要有充分的认识的。<o:p></o:p>

  • 大小: 53.3 KB
分享到:
评论

相关推荐

    Eclipse RCP与Spring OSGi技术详解与最佳实践

    《Eclipse RCP与Spring OSGi:技术详解与最佳实践》由资源的Eclipse专家亲自执笔,并得到了Eclipse官方技术社区的强烈推荐,权威性毋庸置疑!内容全面,系统讲解了利用Eclipse RCP和Spring OSGi开发大规模Java应用的...

    RCP,RCP开发

    **开发实践** 开发RCP应用通常包括以下步骤: 1. **环境搭建**:安装Eclipse IDE,并配置RCP和OSGI相关的开发工具。 2. **插件创建**:使用Eclipse的插件向导创建新的OSGI Bundle,定义其提供的服务和依赖。 3. **UI...

    rcp for java one

    3. **Eclipse RCP开发**:分享使用Eclipse IDE进行RCP应用开发的最佳实践,包括插件开发、调试技巧以及如何发布和部署应用程序。 4. **RCP与JavaFX的结合**:随着JavaFX成为Java客户端UI的新选择,如何将JavaFX与RCP...

    RCP项目学习实例

    RCP项目学习实例是一个专为初学者设计的实践项目,旨在帮助他们理解和掌握RCP及Eclipse插件开发的核心概念和技术。 在RCP项目中,"补丁生成器"是一个典型的例子,它展示了如何利用RCP框架来创建一个具有特定功能的...

    rcp.zip_DEMO_RCP dialog_java rcp_rcp

    这个"rcp.zip_DEMO_RCP_dialog_java rcp_rcp"压缩包显然是一个针对RCP初学者的学习资源,包含了几个示例项目,帮助用户理解和实践RCP的基本概念和技术。 首先,我们要关注的是"demo_rcp_dialog"。在Java RCP中,...

    eclipse RCP mp3工程

    "学习学习,快来下"则提示这个项目适合学习Eclipse RCP的开发者,提供了一个实际案例去理解和实践RCP的开发流程。 【标签】"eclipse RCP mp3 mp3工程"进一步强调了这个项目的两大关键元素:Eclipse RCP平台和MP3...

    documents about Eclipse RCP

    4. **示例应用**:`example_rcp_applications_v2.pdf`可能是包含实际RCP应用的案例研究,这些案例将展示如何使用RCP来构建复杂的应用程序,以及在实践中可能遇到的问题和解决方案。 5. **HTML文章**:`article....

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

    11. **实战项目**:书中很可能会包含一个或多个实际项目案例,引导读者一步步实现一个完整的Eclipse RCP应用,从而将理论知识转化为实践技能。 通过阅读这本书,开发者可以掌握Eclipse RCP的开发技巧,理解其设计...

    Eclipse rcp深入浅出中英文版及配套代码

    12. **案例研究和实践**:书中的配套代码(samples.zip)提供了实际的示例,帮助读者将理论知识应用于实践中,理解Eclipse RCP开发流程。 通过阅读《Eclipse RCP深入浅出》并结合提供的代码样例,开发者不仅可以...

    Eclipse RCP开发教程

    **Eclipse RCP 开发教程** Eclipse Rich Client Platform (RCP) 是一个用于构建桌面应用程序的框架,它基于 Eclipse IDE ...开发者可以通过学习和实践,逐步掌握 RCP 的开发技巧,创建出满足需求的定制化应用程序。

    RCP编程入门(doc版)

    **RCP编程入门** RCP,全称Rich Client Platform,是Eclipse框架提供的一种用于构建桌面应用程序的开发平台...本文档作为RCP编程的入门指南,旨在帮助初学者快速掌握基本概念和操作,为进一步深入学习和实践奠定基础。

    RCP中文入门教程.rar

    RCP,全称为Rich Client Platform,是Eclipse框架下的一个组件,它为开发桌面应用程序提供了一个强大的基础。...通过深入学习和实践,你可以逐步掌握使用RCP构建高效、可维护的桌面应用程序的技能。

    RCP部分课程

    本课程针对的是那些希望深入了解RCP技术并着手实践的学员。 在"RCP部分课程"中,你将学习如何利用RCP来创建自己的桌面应用。首先,你需要理解RCP的基本架构,这包括工作台(Workbench)、视图(Views)、编辑器...

    eclipse RCP Plug-in开发自学教程.pdf

    2. RCP插件式开发需要一定的经验和实践。 但是,通过本教程的学习,读者将能够: 1. 掌握RCP插件式开发的基本概念和开发技巧。 2. 熟悉RCP插件式开发的开发流程和方法。 3. 能够独立开发RCP应用程序。 本教程旨在...

    rcp学习好资料

    "rcp学习好资料"标签进一步确认了这些文件的主要内容,即关于RCP的学习资料,可能是教程、案例研究或者是开发实践的指导。 **文件名称列表解析** 1. **使用Eclipse RCP进行桌面程序开发(五):2D绘图 - 海边沫沫 ...

    Eclipse RCP 初级入门教程

    掌握RCP的基础只是第一步,更深入的学习包括使用MDI(多文档界面)、SWT/JFace高级特性、E4新框架、P2更新机制以及Eclipse RCP在企业级应用中的实践等。 总的来说,"Eclipse RCP 初级入门教程"是一个很好的起点,为...

    eclipse rcp经典程序

    "eclipse rcp经典程序"这个资源很可能包含了完整的示例代码,帮助开发者了解并实践这些关键概念。 1. **RCP基础**:Eclipse RCP是基于插件(Plugins)的架构,每个插件都有自己的功能和职责。开发者可以通过编写...

    RCP程序设计教程打包

    通过这三个文档,你可以从理论到实践,全面掌握RCP开发的基本技能。在学习过程中,不断实践和调试是提升能力的关键,同时,利用Eclipse社区丰富的资源和活跃的论坛,能帮你解决遇到的问题,加速学习进程。记得,RCP...

    Eclipse RCP应用系统开发方法与实战(源代码)

    本资源提供了"Eclipse RCP应用系统开发方法与实战"的源代码,涵盖从基础到进阶的多个章节,便于学习和实践。 在提供的压缩包中,我们可以看到以下几个部分: 1. **第9章.rar** - 这一章可能涵盖了RCP应用系统的...

Global site tag (gtag.js) - Google Analytics