在eclipse平台下,导入一个应用程序模板后,可以直接运行。这篇文章主要将窗体在生成的过程中有哪些重要的步骤总结了一下。
本篇文章分为那两个部分:
第一个部分为rcp应用程序生成窗体经历的几个步骤。
第二个部分描述窗上尚菜单、工具栏的生成。
1.1 rcp应用程序生成窗体经历的几个步骤:<o:p></o:p>
生成应用程序的窗体,主要经历了以下几个步骤:<o:p></o:p>
1、在application中:创建了工作台<o:p></o:p>
int returnCode = PlatformUI.createAndRunWorkbench(display, <o:p></o:p>
new ApplicationWorkbenchAdvisor());<o:p></o:p>
2、在ApplicationWorkbenchAdvisor中:配置应用程序的窗体<o:p></o:p>
public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(<o:p></o:p>
IWorkbenchWindowConfigurer configurer) {<o:p></o:p>
return new ApplicationWorkbenchWindowAdvisor(configurer);<o:p></o:p>
}<o:p></o:p>
3、在ApplicationWorkbenchWindowAdvisor类中:配置菜单栏工具栏<o:p></o:p>
public ActionBarAdvisor createActionBarAdvisor(<o:p></o:p>
IActionBarConfigurer configurer) {<o:p></o:p>
if (fActionBuilder == null)<o:p></o:p>
fActionBuilder = new WorkbenchActionBuilder(configurer);<o:p></o:p>
return fActionBuilder.makeWinAction();<o:p></o:p>
}<o:p></o:p>
4、在WorkbenchActionBuilder类中:返回不同工作台窗体的ActionBarAdvisor<o:p></o:p>
…<o:p></o:p>
public WorkbenchActionBuilder(IActionBarConfigurer Ibarconfigurer) {<o:p></o:p>
this.Ibarconfigurer = Ibarconfigurer;<o:p></o:p>
}<o:p></o:p>
<o:p></o:p>
public ActionBarAdvisor makeWinAction(){ <o:p></o:p>
switch(WorkbenchControler.flag){<o:p></o:p>
case WorkbenchControler.main:<o:p></o:p>
actionBarAdvisor = new MainActionBarAdvisor(Ibarconfigurer);<o:p></o:p>
break;<o:p></o:p>
case WorkbenchControler.child_1:<o:p></o:p>
actionBarAdvisor = new Child_1_ActionBarAdvisor(Ibarconfigurer);<o:p></o:p>
break;<o:p></o:p>
case WorkbenchControler.child_2:<o:p></o:p>
actionBarAdvisor = new MainActionBarAdvisor(Ibarconfigurer);<o:p></o:p>
break;<o:p></o:p>
}<o:p></o:p>
return actionBarAdvisor;<o:p></o:p>
}<o:p></o:p>
…<o:p></o:p>
那么eclipse是怎样来帮助我们生成一个主窗体的呢?在这个过程中又经历了哪些过程?现在详细的学习这个过程。<o:p></o:p>
(1)PlatformUI的方法createAndRunWorkbench(),这个方法用来创建工作台。<o:p></o:p>
在(1)中,调用的是PlatformUI的这个方法:<o:p></o:p>
public static int createAndRunWorkbench(Display display,<o:p></o:p>
WorkbenchAdvisor advisor) {<o:p></o:p>
return Workbench.createAndRunWorkbench(display, advisor);<o:p></o:p>
}<o:p></o:p>
通过createAndRunWorkbench来创建工作台窗体,在这个方法中,调用了Workbench了的createAndRunWorkbench这个方法。<o:p></o:p>
(2) Workbench的createAndRunWorkbench()方法<o:p></o:p>
public static final int createAndRunWorkbench(Display display,<o:p></o:p>
WorkbenchAdvisor advisor) {<o:p></o:p>
// create the workbench instance<o:p></o:p>
Workbench workbench = new Workbench(display, advisor);<o:p></o:p>
// run the workbench event loop<o:p></o:p>
int returnCode = workbench.runUI();<o:p></o:p>
return returnCode;<o:p></o:p>
}<o:p></o:p>
在这个方法中,创建了一个工作台的实例,并把adivsor作为参数传入。然后运行一个Workbench中的一个runUI方法,主要通过这个方法创建了工作台的窗体。我们看看这个方法都实现了什么。<o:p></o:p>
(3)Workbench的runUI()方法<o:p></o:p>
我们看下面这行代码,int returnCode = workbench.runUI();<o:p></o:p>
runUI()的功能就是:用来运行workbench UI(工作台窗体),直到工作台(workbench)关闭和重新启动,它用来承担处理和分派事件。(Internal method for running the workbench UI. This entails processing and dispatching events until the workbench is closed or restarted.)<o:p></o:p>
当正常退出时,返回RETURN_OK,当工作台通过一个针对IWorkbench.restart的访问终止时,返回RETURN_RESTART 当工作台不能被启动时返回RETURN_UNSTARTABLE。其他值留为后用。 <o:p></o:p>
在这个runUI()方法中,我们看到一个比较重要的方法:<o:p></o:p>
(4)runUI()方法中的init(display)方法<o:p></o:p>
boolean initOK = init(display);这个方法属于Workbench的内部方法,用来初始化工作台,重建或打开一个窗体。如果init成功,返回initOK。在这个方法中,创建了针对窗体的管理WindowManager,命令的管理CommandManager,上下文的管理ContextManager.<o:p></o:p>
另外在这个方法中还初始化了图像,颜色等。<o:p></o:p>
initializeImages();<o:p></o:p>
initializeFonts();<o:p></o:p>
initializeColors();<o:p></o:p>
initializeApplicationColors();<o:p></o:p>
{通过这些方法,可以学习eclipse是怎么初始化Image,Font,Color等这些比较耗费资源的例子,针对这方面的学习,以后再续。}<o:p></o:p>
在init中,还有个比较重要的方法:通过advisor引用internalBasicInitialize方法:<o:p></o:p>
advisor.internalBasicInitialize(getWorkbenchConfigurer());<o:p></o:p>
我们首先看看它的参数:一个WorkbenchConfiguer对象,getWorkbenchConfigurer()方法在WorkbenchConfiguer类中定义,它返回一个单例WorkbenchConfiguer对象。这个对象用来配置工作台。<o:p></o:p>
public final void internalBasicInitialize(IWorkbenchConfigurer configurer) {<o:p></o:p>
if (workbenchConfigurer != null) {<o:p></o:p>
throw new IllegalStateException();<o:p></o:p>
}<o:p></o:p>
this.workbenchConfigurer = configurer;<o:p></o:p>
initialize(configurer);<o:p></o:p>
}<o:p></o:p>
在internalBasicInitialize将configure对象引用传递给WorkbenchAdvisor对象的workbenchConfigurer属性,并调用了WorkbenchAdvisor类的initialize方法。这个很重要。我们在有关工作台(Workbench)生命周期的文章中提到:initialize方法是在任何窗体打开前调用这个方法。可以用来初始化。我们可以在WorkbenchAdvisor的子类中来实现这个方法。<o:p></o:p>
我们来看看这个方法的官方译文:<o:p></o:p>
在工作台启动之前,执行任意的初始化内容。<o:p></o:p>
在任何窗体被打开之前,工作台初始化时,这个方法会被优先的访问。用户不能直接访问这个方法,,缺省的没有任何的实现。子类可以继承这个方法。用户会用configuer来配置工作台,如果需要用,则用户需要获得通过getWorkbenchConfigurer来获得configurer。<o:p></o:p>
[Performs arbitrary initialization before the workbench starts running. <o:p></o:p>
This method is called during workbench initialization prior to any windows being opened. Clients must not call this method directly (although super calls are okay). The default implementation does nothing. Subclasses may override. Typical clients will use the configurer passed in to tweak the workbench. If further tweaking is required in the future, the configurer may be obtained using getWorkbenchConfigurer. ]<o:p></o:p>
(5)preStartup()方法<o:p></o:p>
在init()这个方法中,还调用了:<o:p></o:p>
advisor.preStartup();<o:p></o:p>
具体的可以参考:前面讲到WorkbenchAdvisor的生命周期中的preStartup方法,它的调用是在第一个窗口打开之前。在启动或者恢复期间暂时禁用某些项时,该方法非常有用。<o:p></o:p>
这个方法在第一个工作台窗体被打开或恢复(重建)时,执行任意的操作。<o:p></o:p>
这个的实在workbench被初始化的之后被访问的,用户不能直接访问这个方法,必须通过子类继承。<o:p></o:p>
[Performs arbitrary actions just before the first workbench window is opened (or restored). <o:p></o:p>
This method is called after the workbench has been initialized and just before the first window is about to be opened. Clients must not call this method directly (although super calls are okay). The default implementation does nothing. Subclasses may override.] <o:p></o:p>
然后再执行下面这个if语句:<o:p></o:p>
if (!advisor.openWindows()) {<o:p></o:p>
return false;<o:p></o:p>
}<o:p></o:p>
(6)WorkbenchAdvisor的openWindows()方法<o:p></o:p>
分享到:
相关推荐
### 开发您的第一个 Eclipse RCP 应用程序 #### 富客户端平台 (RCP) 概述 **Eclipse Rich Client Platform (RCP)** 是一个强大的框架,旨在利用 Eclipse 平台来构建非集成开发环境 (IDE) 类型的最终用户应用程序。...
通过这个压缩包中的教程和源代码,开发者不仅可以学习到Eclipse RCP的基本概念,还能掌握实际的开发技巧,从而构建出功能完善的桌面应用程序。无论是初学者还是经验丰富的开发者,都能从中受益匪浅。
《ECLIPSE+RCP应用系统开发方法与实战》这本书是高岗先生关于使用Eclipse RCP(Rich Client Platform)进行应用系统开发的一本实战指南。Eclipse RCP是Eclipse IDE的一部分,它提供了一个框架,使得开发者可以构建...
本文将详细阐述实现RCP应用程序的基本步骤,同时参考《Eclipse插件RCP中文入门教程.pdf》中的内容,帮助你更好地理解和掌握RCP开发。 1. **安装Eclipse IDE for RCP and RAP Developers** 开始RCP开发前,首先需要...
Eclipse Rich Client Platform (RCP) 是一个强大的框架,用于构建桌面应用程序。它基于Java,提供了丰富的用户界面组件和插件机制,使得开发者能够构建功能丰富的、可扩展的应用程序。"Eclipse RCP 应用系统开发方法...
【开发你的第一个Eclipse RCP应用程序】 Eclipse Rich Client Platform(RCP)是Eclipse框架的一个组成部分,专门用于构建复杂的桌面应用程序。RCP利用Eclipse的插件体系结构,允许开发者创建具有高度可定制和可...
本资源提供的"《Eclipse RCP 应用系统开发方法与实战 源代码》"是针对Eclipse RCP开发的实践教程,包含了多个章节的源代码实例,帮助开发者深入理解和掌握Eclipse RCP的开发技巧。 1. **Eclipse RCP基础** Eclipse...
在“Eclipse RCP应用系统开发方法与实战(第四章)”中,我们将深入探讨如何利用这个平台进行高效且灵活的应用程序开发。本章节主要关注的是实战经验与具体实现步骤,旨在帮助开发者掌握Eclipse RCP的核心概念和技术...
非常好的一本JAVA RCP入门实战的书,兼顾理论和实战。
Eclipse RCP(Rich Client Platform)是Eclipse框架下的一个应用程序开发平台...通过对源码的分析和实践,开发者可以提升在桌面应用开发领域的专业技能,特别是在处理复杂数据操作和定制化用户界面时,会有很大的帮助。
Eclipse RCP是Eclipse框架下的一个开发平台,它允许开发者构建桌面应用程序,具有丰富的用户界面和高度可定制性。Eclipse RCP基于模型-视图-控制器(MVC)架构,提供了模块化和可扩展的开发环境,使得开发者能够快速...
**Eclipse RCP** (Rich Client Platform) 是一种基于Java的开源框架,用于开发桌面应用程序。自从Eclipse 3.0版本以来,RCP逐渐成为构建高度定制化、功能丰富的桌面应用的标准平台之一。 **快速起步步骤**: 1. **...
eclipse rcp应用系统开发 方法与实践 随书源代码
Eclipse Icons是Eclipse RCP(Rich Client Platform)开发中常用的一套图形用户界面资源,它们为Eclipse RCP应用程序提供了丰富的图标集,用于构建视觉上吸引人的且易于理解的用户界面。Eclipse RCP是一种基于Java的...
总的来说,这个项目将带你深入Eclipse RCP的世界,通过实际操作,你可以提升在桌面应用开发领域的技能,理解如何利用Eclipse RCP的特性来构建强大且灵活的应用程序。在完成这个项目后,你将具备独立设计、开发和维护...
RCP利用插件化的系统架构,提供了模块化和动态化的应用开发能力,同时也简化了用户界面的生成。 首先,RCP的核心组成部分包括: 1. **Workbench(工作台)**:这是Eclipse用户界面的基础,由SWT(Standard Widget ...
eclipse rcp应用系统开发方法与实践 随书源代码