EclipseRCP教程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
最近在客户端软件开发过程中,使用到了Eclipse RCP的若干技术,有种相见很晚的感觉。尽管自己在日常开发中也使用了SWT中的若干技术,在运用了Theme之后看起来也让人眼前一亮,但是比起RCP 就相当于闭门造车了,例如下面两幅图片,就是SWT技术和RCP 技术开发出的不同界面,后者看起来是不是很炫呢,用流行的话来讲,就是使用户的体验更rich了,呵呵。
SWT界面:
Eclipse RCP界面:
好了,既然Eclipse RCP开发出的界面如此漂亮,那我们就可以借助Eclipse RCP平台中各类UI组件来改善应用程序上的UI缺陷,通过RCP平台上的各类丰富的GUI视图,来打造赏心悦目的应用程序。但是在RCP开发的过程中,UI视图之间是相互依赖的,需要进行交互,目前国内教程对这一步骤往往语焉不详,下文就以实例的形式详细介绍Eclipse RCP View视图之间的交互机制,并总结了开发过程中的一些注意事项,避免大家绕了弯路,呵呵。
(一)下载最新的Eclipse RCP开发环境
开发RCP的首要前提是下载RCP开发环境,从/上可以下载,下载之后是个zip格式文件,解压到任何目录下都可以直接运行,前提是装好jdk。在Eclipse的官方网站上,针对不同的开发环境,已经为我们打好了不同的package,只要下载专门用来开发RCP的package即可。当然如果你已经安装了Eclipse普通开发环境,想增加RCP相关的开发功能,需要通过Eclipse的update功能来添加就可以了,不过后者采用在线安装的方式,容易引起packge插件下载不全,导致开发时出现莫明其妙的错误,因此推荐第一种方案。
(二)新建并运行Eclipse RCP项目
Eclipse安装并启动完毕之后,我们可以以插件的形式新增一个RCP模块,在该模块的基础上再添加不同的视图,这样就为下一步打下了良好的基础:
在Eclipse的Package Explorer中单击右键,选择菜单第一项“new”,在弹出的子菜单中选择“other”,在对话框中如下图选择:
在弹出对话框的“project name”栏中填入自己的项目名称,例如“hellorcp“,其余选项保持默认状态,点击下一步,在Plugin content对话框中“Rich Client Application”中,选择"YES",如下图所示:
选择YES表示除了新建一个插件之外,还愿意将其转换成一个RCP应用,以便以后脱离Eclipse开发环境而独立部署,而插件是不能独立运行的,必须依附Eclipse而运行。
点击下一步,选择一个模版,如下图所示:
点击Finish,在出现的最后对话框中选择“static content”,点击完成,这样就完成了向导方式下的Eclipse RCP项目hellorcp的创建,下面是该RCP项目在package explorer中的视图:
至此,我们已经创建了一个hellorcp的项目,在右边的editor窗口中,自动出现了hellorcp 的启动视图,点击"Testing"中的“launch”链接,可以启动该rcp项目:
大功告成,我们得到了一个可以运行的Eclipse RCP项目,Eclipse RCP的项目创建过程是不是非常简单呢?现在的界面就像一个白板,我们已经迫不及待地想在上面丰富我们的视图了,接下来我们的任务是创建不同的视图,并添加代码让它们动起来,在做这些之前,介绍一下Eclipse RCP上面的一些概念:
(三)Eclipse RCP 术语介绍:
Application
Application的作用就是应用程序或产品(product)的入口,它和Java系统中,类定义的main()方法作用一样. 当Runtime启动的时候,应用程序开始运行,应用程序退出的时候,Eclipse关闭。
在我们的hellorcp中的src文件夹中,Eclipse为我们自动生成了Application类,如下
面的代码片段:
1public Object start(IApplicationContext context) {2Display display = PlatformUI.createDisplay();3try{4int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor()); 5
if(returnCode == PlatformUI.RETURN_RESTART) {6 return IApplication.EXIT_RESTART;7}8return IApplication.EXIT_OK;9} finally{10 display.dispose();11}12}
∙
在start方法中,首先创建了Display对象,然后使用平台的UI线程PlatformUI启动了程序运行,而启动过程是通过传递display对象以及新建的ApplicationWorkbenchAdvisor 对象来进行的,下面就介绍一下ApplicationWorkbenchAdvisor对象
ApplicationWorkbenchAdvisor
在应用程序中,每一个窗口都有一个WorkbenchWindowAdvisor ,它的作用是也是告诉窗口如何渲染.在Window advisors根据窗口的生命周期定义了多个切入点函数,如preWindowOpen()窗口打开前,postWindowCreate()创建窗口结后等,可以在不同的方法创建窗口的内容,了解窗口的生命周期是很有必要的,可以让你规划后,在何时才能创建相应的对象,有效的避免窗口中的组件还没有被创建,就已经在使用了.
1public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {23 private static final String PERSPECTIVE_ID = "hellorcp.perspective"; 45public WorkbenchWindowAdvisor
createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {6 return new ApplicationWorkbenchWindowAdvisor(configurer);7}89 public void initialize(IWorkbenchConfigurer configurer) {10 super.initialize(configurer);11
configurer.setSaveAndRestore(true);12}1314public String getInitialWindowPerspectiveId() {15return PERSPECTIVE_ID;16}17}
∙
在ApplicationWorkbenchAdvisor中,向导为我们创建了ApplicationWorkbenchWindowAdvisor对象,别的什么也没做。Eclipse遵从经典的MVC 模式来设计,其中Advisor类就相当于Model,相当于视图的内容提供者,这样就把view 和model解耦了。像它的名字一样,WorkbenchAdvisor 告诉工作台怎样显示,显示什么等信息。在RCP应用程序中,很多地方用这种模板模式来构建UI组件。
WorkbenchAdvisor做了两件事:
初始化默认视图和创建Application的window advisor
ApplicationWorkbenchWindowAdvisor
在应用程序中,每一个窗口都有一个WorkbenchWindowAdvisor ,它的作用是也是告诉窗口如何渲染.在Window advisors根据窗口的生命周期定义了多个切入点函数,如