前面讲到了从eclipse平台下直接导出的rcp应用程序模板中核心类的功能。在项目的研发过程中,不同的窗体总体上代表了不同的功能。因此,我们有时需要调用另外一个工作台窗体窗体来表现另外一个系统模块的功能,而这个活动窗体也需要像需要像主窗体一样,要展示对应的导航树,鹰眼图等,需要在子窗体和主窗体中切换。怎么实现这个功能呢? <o:p></o:p>
调用另外一个工作台窗体(活动的),实际上就是新生成一个新的工作台窗体,并给这个新的工作台窗体配置相关的菜单、工具栏。前面讲到,我们在Rcp的核心类Application里已经生成了一个工作台,我们需要打开在此基础上新打开一个工作台窗体,具体的方式如下:<o:p></o:p>
PlatformUI.getWorkbench().openWorkbenchWindow(null);<o:p></o:p>
然后,我们在为这个WorkbenchWindow来配置一些菜单,工具栏,就达到我们的要求了。<o:p></o:p>
<o:p> </o:p>
下面,我们详细的说明是如何实现这些功能的:<o:p></o:p>
在3.1版本以后,前面讲到要生成一个工作台窗体,调用了Application,WorkbenchAdvisor,WorkbenchWindowAdvisor,ActionBarAdvisor。处了Application用来创建工作台,其他的类都用来配置工作台窗体,我们新打开一个工作台窗体时,也需要用这些类来配置工作台窗体。WorkbenchAdvisor,WorkbenchWindowAdvisor不用重新定义,用来配置新工作台窗体菜单、工具栏,我们则必须另外实现接口ActionBarAdvisor了。
于是,我们引入了一个新类,WorkbenchActionBuilder,通过这个类,我们来调用不同窗体actionbar生成器(即实现不同窗体的菜单、工具栏)。<o:p></o:p>
package com.jdenght.rcpstudy.action;<o:p></o:p>
<o:p> </o:p>
import org.eclipse.ui.application.ActionBarAdvisor;<o:p></o:p>
import org.eclipse.ui.application.IActionBarConfigurer;<o:p></o:p>
import org.eclipse.ui.application.WorkbenchWindowAdvisor;<o:p></o:p>
import com.jdenght.rcpstudy.MainActionBarAdvisor;<o:p></o:p>
import com.jdenght.rcpstudy.Child_1_ActionBarAdvisor;<o:p></o:p>
<o:p> </o:p>
public final class WorkbenchActionBuilder {<o:p></o:p>
private IActionBarConfigurer Ibarconfigurer;<o:p></o:p>
private WorkbenchWindowAdvisor workbenchWindowAdvistor;<o:p></o:p>
private ActionBarAdvisor 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>
public void dispose() {<o:p></o:p>
workbenchWindowAdvistor.dispose();<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
如上所述,当当前打开的为主窗体时,调用MainActionBarAdvisor,为主窗体来配置菜单、工具栏等,当当前打开的为子窗体时,调用一个子窗体的菜单、工具栏生成类Child_1_ActionBarAdvisor。<o:p></o:p>
于是,有人会提到,我们在哪里调用WorkbenchActionBuilder这个类呢,这个类怎样让它调用不同的工具栏生成器呢?WorkbenchControler有什么作用呢?<o:p></o:p>
这个类是在WorkbenchWindowAdvisor的实现类中调用的,让我们来看看代码:<o:p></o:p>
package com.jdenght.rcpstudy;<o:p></o:p>
<o:p> </o:p>
import org.eclipse.ui.application.ActionBarAdvisor;<o:p></o:p>
import org.eclipse.ui.application.IActionBarConfigurer;<o:p></o:p>
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;<o:p></o:p>
import org.eclipse.ui.application.WorkbenchWindowAdvisor;<o:p></o:p>
import com.jdenght.rcpstudy.action.WorkbenchActionBuilder;<o:p></o:p>
<o:p> </o:p>
public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {<o:p></o:p>
<o:p> </o:p>
private WorkbenchActionBuilder fActionBuilder;<o:p></o:p>
public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {<o:p></o:p>
super(configurer);<o:p></o:p>
}<o:p></o:p>
<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>
<o:p> </o:p>
public void preWindowOpen() {<o:p></o:p>
IWorkbenchWindowConfigurer configurer = getWindowConfigurer();<o:p></o:p>
// configurer.setShowCoolBar(true);<o:p></o:p>
// configurer.setShowStatusLine(true);<o:p></o:p>
configurer.setTitle("网络资源管理系统");<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
在rcp应用程序学习一中,在createActionBarAdvisor()是这样定义的:<o:p></o:p>
return new ApplicationActionBarAdvisor(configurer);<o:p></o:p>
它直接返回了一个菜单栏,工具栏的生成器。现在,我们让fActionBuilder.makeWinAction()来返回对应的当前窗体需要的actionbar(菜单,工具栏)生成器了。<o:p></o:p>
下面,我们在看看WorkbenchControler里有什么:<o:p></o:p>
import org.eclipse.ui.IWorkbenchWindow;<o:p></o:p>
import org.eclipse.ui.PlatformUI;<o:p></o:p>
<o:p> </o:p>
public class WorkbenchControler {<o:p></o:p>
//不同的工作台窗体代表的值<o:p></o:p>
public final static int main = 1;<o:p></o:p>
public final static int child_1 = 2;<o:p></o:p>
public final static int child_2 = 3;<o:p></o:p>
分享到:
相关推荐
### 开发您的第一个 Eclipse RCP 应用程序 #### 富客户端平台 (RCP) 概述 **Eclipse Rich Client Platform (RCP)** 是一个强大的框架,旨在利用 Eclipse 平台来构建非集成开发环境 (IDE) 类型的最终用户应用程序。...
3. **工作台管理**:工作台是Eclipse RCP中的核心,它管理着应用程序的用户界面。开发者要学会如何创建和管理透视图,以及在透视图中添加视图和编辑器。 4. **视图和编辑器**:视图提供信息展示,编辑器则用于数据...
《ECLIPSE+RCP应用系统开发方法与实战》这本书是高岗先生关于使用Eclipse RCP(Rich Client Platform)进行应用系统开发的一本实战指南。Eclipse RCP是Eclipse IDE的一部分,它提供了一个框架,使得开发者可以构建...
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的高级特性,如扩展点(Extension Point)、透视图(Perspective)、工作流(Workbench Workflow)等。通过深入理解这些概念,你将能够构建出更复杂、更强大...
非常好的一本JAVA RCP入门实战的书,兼顾理论和实战。
Eclipse RCP(Rich Client Platform)是Eclipse框架下的一个应用程序开发平台,它提供了一种构建强大、可扩展且用户友好的桌面应用的途径。Eclipse RCP的应用系统开发涉及多个核心概念和技术,包括组件模型、事件...
### 使用Eclipse RCP进行桌面程序开发:详细指南 #### 一、Eclipse RCP简介与...随着对RCP框架的深入了解,您还可以进一步探索更多的高级特性和功能,如视图、编辑器和透视图等,从而开发出更为复杂的桌面应用程序。
Eclipse RCP是Eclipse框架下的一个开发平台,它允许开发者构建桌面应用程序,具有丰富的用户界面和高度可定制性。Eclipse RCP基于模型-视图-控制器(MVC)架构,提供了模块化和可扩展的开发环境,使得开发者能够快速...
在“Eclipse RCP应用系统开发方法与实战(第四章)”中,我们将深入探讨如何利用这个平台进行高效且灵活的应用程序开发。本章节主要关注的是实战经验与具体实现步骤,旨在帮助开发者掌握Eclipse RCP的核心概念和技术...
RCP利用插件化的系统架构,提供了模块化和动态化的应用开发能力,同时也简化了用户界面的生成。 首先,RCP的核心组成部分包括: 1. **Workbench(工作台)**:这是Eclipse用户界面的基础,由SWT(Standard Widget ...
总的来说,这个项目将带你深入Eclipse RCP的世界,通过实际操作,你可以提升在桌面应用开发领域的技能,理解如何利用Eclipse RCP的特性来构建强大且灵活的应用程序。在完成这个项目后,你将具备独立设计、开发和维护...
总的来说,RCP和OSGI的结合提供了一种高效、灵活且易于维护的桌面应用开发方式,开发者可以充分利用它们的优势来构建复杂、功能丰富的应用程序。在实际项目中,理解并熟练运用RCP和OSGI技术,能大大提高开发效率和...
Eclipse RCP应用程序的开发涉及多个方面,包括视图、编辑器、透视图、操作和命令等,每个组件在界面上都需要清晰的标识。Eclipse Icons就是为此目的设计的,它们遵循一致的设计原则和风格,使得开发者能够快速识别...
本资源提供了"Eclipse RCP应用系统开发方法与实战"的源代码,涵盖从基础到进阶的多个章节,便于学习和实践。 在提供的压缩包中,我们可以看到以下几个部分: 1. **第9章.rar** - 这一章可能涵盖了RCP应用系统的...