这篇文章基本上是没怎么加我自己写的代码的,几乎全部是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>
四.建立数据model,dao,service,action<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 代码
- public class Perspective implements IPerspectiveFactory {
- public void createInitialLayout(IPageLayout layout) {
- }
- }
IperspectiveFactory指定一个创建透视图接口,我们只需要实现它即可。程序会在启动的时候加载这个类,具体是通过plugin.xml里面的扩展点:
<extension></extension> point="org.eclipse.ui.perspectives">――个人认为:我们可以把RCP启动框架OSGI相当于Spring IOC容器,通过配置文件加载并管理各个方面的资源。<o:p></o:p>
<!----> <!----><o:p></o:p>
具体创建透视图的方法是:
java 代码
- public void createInitialLayout(IPageLayout layout) {
- String editorArea = layout.getEditorArea();
- layout.setEditorAreaVisible(false);
-
- layout.addStandaloneView(NavigationView.ID, false, IPageLayout.LEFT, 0.25f, editorArea);
- IFolderLayout folder = layout.createFolder("messages", IPageLayout.TOP, 0.5f, editorArea);
- folder.addPlaceholder(View.ID + ":*");
- folder.addView(View.ID);
-
- layout.getViewLayout(NavigationView.ID).setCloseable(false);
- }
我们可以在里面部署我们的透视图,比如透视图开始位置,大小,是否可见等――系统通过传入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>
现象来详细看下WorkbenchWindowAdvisor。WorkbenchAdvisor是通过创建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 代码
- 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();
- }
我们可以很清楚的知道,线程会在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 代码
- public void run() {
- MessageDialog.openInformation(window.getShell(), "Open", "Open Message Dialog!");
- }
- }
这就更清楚了。我们只要继承Action并覆盖它的run方法就可以实现点击的动作了。哈哈。Eclispe我太喜欢你了,<o:p></o:p>
好我们自己来定义实现一个Action吧。<o:p></o:p>
java 代码
- public class MessagePopupAction extends Action {
-
- private final IWorkbenchWindow window;
-
- MessagePopupAction(String text, IWorkbenchWindow window) {
- super(text);
- this.window = window;
-
- setId(ICommandIds.CMD_OPEN_MESSAGE);
-
- setActionDefinitionId(ICommandIds.CMD_OPEN_MESSAGE);
- setImageDescriptor(org.wuhua.rcp.Activator.getImageDescriptor("/icons/sample3.gif"));
- }
-
- public void run() {
- MessageDialog.openInformation(window.getShell(), "Open", "Open Message Dialog!");
- }
- }
上面只是我对rcp一点认识,如果要想设计好rcp我觉得除了对这些基本知识要有了解外,对swt/jface也是要有充分的认识的。<o:p></o:p>
- 大小: 53.3 KB
分享到:
- 2006-12-20 08:33
- 浏览 4742
- 评论(0)
- 论坛回复 / 浏览 (0 / 7575)
- 查看更多
相关推荐
《Eclipse RCP与Spring OSGi:技术详解与最佳实践》由资源的Eclipse专家亲自执笔,并得到了Eclipse官方技术社区的强烈推荐,权威性毋庸置疑!内容全面,系统讲解了利用Eclipse RCP和Spring OSGi开发大规模Java应用的...
eclipse rcp应用系统开发方法与实践 随书源代码
eclipse rcp应用系统开发方法与实践 随书源代码
eclipse rcp应用系统开发 方法与实践 随书源代码
《eclipse rcp应用系统开发方法与实践》源代码
Eclipse RCP plugin 开发快速入门。理论与实践相结合,容易理解。
用于医疗实践各个方面的Eclipse RCP程序:电子病历(EMR),实验室发现等,以及会计,计费(瑞士TARMED系统,其他待开发系统)和其他日常工作。 可以通过http://download.elexis.info/3.1.0下载功能完整的版本。 ...
Eclipse UI Forms对于业务应用程序的需求非常有限。 该项目旨在增强SWT,UI表单,数据绑定,并将它们放在一起,以提供深刻的框架和最佳实践,以使用RCP /创建,绑定验证表单
控制土壤侵蚀以及悬浮沉积物向接收水的运输和沉积,尤其是与气候和土地利用变化的影响和相互作用有关的控制,对于有效的流域管理至关重要。 下一世纪,由于气候变化,加拿大大西洋省—新英格兰地区的降雨侵蚀力有望...
RCP法与RSP法的主要区别是前者采用循环渐进的开发方式,原型将成为最终的产品,而后者将被废弃。(√) 三、简答题 1. 软件产品的特性是什么? 答: ● 软件是一种逻辑产品,具有无形性; ● 软件产品的生产...
红十字会火灾风险地图v2 美国的哪些地区发生家庭火灾的风险最高,美国红十字会应在哪里安装烟雾报警器? 在阶段1中,DKDC创建了6个模型来分析火灾响应数据,烟雾警报数据和人口普查数据,以便为全美国的人口普查...
当前研究表明,在RCP4.5和RCP8下,玉米单产预计下降8%-38% .5到21世纪末的情景,而适应对于减轻气候变化的影响至关重要。 大多数论文中考虑的主要农业适应方案是播种日期,品种和作物水管理实践的变化。 建议使用...
资源名称:OSGi相关框架学习资料资源目录:【】EclipseRCP与SpringOSGi技术详解与最佳实践【】osgi.core.javadoc-5.0.0【】OSGi_R4_Spec_zh_cn_origional【】OSGi原理与最佳实践【】OSGi原理与最佳实践的源码【】...
1.1.1 胖客户端程序RCP 2 1.1.2 瘦客户端程序TCP 2 1.1.3 B/S与C/S结构 3 1.2 Web开发背景知识 3 1.2.1 Web访问基本原理 3 1.2.2 HTTP超文本传输协议 4 1.2.3 Web浏览器 5 1.2.4 Web服务器 5 1.3 Web开发技术发展...
本书分为4个部分共24章,以插件开发为中心,围绕插件开发主要介绍SWT/JFace的应用、插件扩展点的实现,以及GEF、EMF和RCP的相关知识。本书所有讲解的范例都能在附书光盘中找到可运行的源代码,并且已按章节归类。...
1、加载相关库和数据集 使用的库主要有:pandas、numpy、sklearn、matplotlib、seaborn 使用的数据集:sklearn库中的鸢尾花数据集 import pandas as pd import numpy as np from sklearn.datasets import ...plt.rcP
度娘和谷哥已经变成了我们学习工作生活中必不可少的工具。 更有甚者,甚至已经不用输入法来搜索,而直接通过语音识别来搜索。但是我们搜索的结果真的可靠?我们在找到我们想要的资源之后是否有认真检验一下,我们...
本书内容主要来自作者多年的软件开发和教学、培训经验,通过实例由浅入深地介绍MyEclipse的基本应用,是一本强调实践技能的实用性指导图书。 本书内容丰富、技术全面、案例实用,而且所有的实例都以MyEclipse工程的...
Activity-Manager:Activity Manager是一个项目管理工具。 它可以帮助项目负责人管理和检查合作者的活动