前面讲到了从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 Rich Client Platform (RCP) 的目标是在各种不是集成开发环境 (IDE) 的最终用户应用程序中使用 Eclipse。随着 Eclipse V3.1 的发布,创建 RCP 应用程序变得容易。本教程将指导您一步步创建自己的 RCP 应用...
eclipse rcp应用系统开发方法与实战源代码.zip
ECLIPSE+RCP应用系统开发方法与实战 PDF 比较清晰 有目录 本人在网上找了N久一直没找到,在taobao上买的。 所以收了5分,不要说我太黑哦。
非常好的一本JAVA RCP入门实战的书,兼顾理论和实战。
Eclipse RCP应用系统开发方法与实战
Eclipse RCP 应用系统开发方法与实战
Eclipse RCP 应用系统开发方法与实战 源代码
开发你的第一个EclipseRCP应用程序汇编.pdf
eclipse rcp应用系统开发 方法与实践 随书源代码
eclipse rcp应用系统开发方法与实践 随书源代码
eclipse rcp应用系统开发方法与实践 随书源代码
陈冈所著的Eclipse RCP应用系统开发方法与实战 源码中所需要的所有jar包。如果某位手上有完整的文本材料也请发我一份,谢谢
将涉及以下内容:创建第一个RCP程序,创建菜单和工具栏,查看,编辑,对话,外部JAR的用法,向一个RCP应用程序产品中添加标志和帮助。每一章都基本独立于其他章节。欢迎访问我的网站——www.xeclipse.com。
Eclipse RCP 应用系统开发 ppt
eclipse icons,用来开发rcp桌面应用程序
Eclipse+RCP应用系统开发.ppt Eclipse+RCP应用系统开发.ppt Eclipse+RCP应用系统开发.ppt
Eclipse Rcp 桌面程序开发中文教程
eclipse rcp应用系统开发方法与实战的代码文件
The objective of the Eclipse Rich Client Platform (RCP) is to enable Eclipse to be used in a wide range of end-user applications that are not integrated development environments (IDEs). With the ...