RCP中文入门教程.docx

上传人:b****5 文档编号:7714937 上传时间:2023-01-25 格式:DOCX 页数:23 大小:490.63KB
下载 相关 举报
RCP中文入门教程.docx_第1页
第1页 / 共23页
RCP中文入门教程.docx_第2页
第2页 / 共23页
RCP中文入门教程.docx_第3页
第3页 / 共23页
RCP中文入门教程.docx_第4页
第4页 / 共23页
RCP中文入门教程.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

RCP中文入门教程.docx

《RCP中文入门教程.docx》由会员分享,可在线阅读,更多相关《RCP中文入门教程.docx(23页珍藏版)》请在冰豆网上搜索。

RCP中文入门教程.docx

RCP中文入门教程

RCP中文入门教程

赵阳2005.12.26

 

简单地讲,一个RCP应用就是一个可独立于EclispeIDE开发环境运行的Eclipse插件。

下面我们以一个简单的例子开始我们的RCP旅程。

 

一、新建插件工程

因为RCP应用本身就是一个Eclispe插件,所以从新建一个Eclispe插件工程开始。

1)启动Eclispe,从Eclispe的File菜单创建一个插件工程:

File->New->Project->Plug-inDevelopment->Plug-inProject

点击Next,进入NewPlug-inProject插件向导:

在ProjectName中输入工程名称:

simplebrowser(最好小写)。

勾选“CreateanOSGibundlemainfest”使用OSGi打包清单。

OSGi是Eclipse3.0以上版本用于动态装载插件的标准,在Eclipse2.1中是不需要的。

最好选中它。

点击Next按钮。

修改Plug-inID及其他插件属性值。

这里采用默认值,在“RichClientApplication”一栏中,“Wouldyouliketocreatearichclientapplication?

”一项选择“Yes”设置创建的插件为RCP应用。

点击Next。

在模板中选择最基本的HelloRCP模板,点击“Finish”按钮,Eclispe将会创建一个简单的RCP应用并且自动打开插件清单编辑器的主页面。

在这里你可以方便的配置你的RCP应用,免去手工编写和修改配置文件的麻烦。

在插件清单编辑器的OverView页,点击“LaunchanEclipseapplication”链接就会看到你的RCP应用运行时的样子。

2)工程创建完成后,Eclipse将自动生成以下内容:

Application类

ApplicationActionBarAdvisor类

ApplicationWorkbenchAdvisor类

ApplicationWorkbenchWindowAdvisor类

SimplebrowserPlugin类

Perspective类

plugin.xml文件

build.properties文件

 

a)Application类

Application类是RCP应用的主程序,相当于整个RCP应用的控制器。

Application类的职责是创建一个工作台(Workbench)然后添加一个工作台顾问类(WorkbenchAdvisior)。

它是启动RCP应用运行的第一个程序。

这个类实现了Eclipse的IPlatformRunnable接口。

对于绝大多数的RCP应用,这个类的代码都是不用修改的。

工作台(Workbench)是RCP框架的一部分,一个RCP应用只能有一个工作台,但是可以有多个工作台窗口(WorkbenchAdvisior)。

工作台的结构如下:

b)Advisor类

ApplicationActionBarAdvisor,ApplicationWorkbenchAdvisor和ApplicationWorkbenchWindowAdvisor

这三个类是RCP应用的三个核心Advisor类。

它们都继承于相应的抽象Advisor父类。

是RCP应用生命周期中非常重要的三个类。

 

ApplicationWorkbenchAdvisor

在主程序Application类的run()方法中引用了ApplicationWorkbenchAdvisor类。

这个WorkbenchAdvisor类对Workbench的外观进行了配置。

ApplicationWorkbenchAdvisor继承了WorkbenchWindowAdvisor抽象类,插件工程向导自动填充了createWorkbenchWindowAdvisor和getInitialWindowPerspectiveId方法体,我们同样可以覆写(override)父类的其他方法。

这个类的方法会在工作台(Workbench)的生命周期的各个关键时刻由RCP平台调用。

是最重要的一个Advisor类。

下面是对WorkbenchAdvisor类中几个重要的方法的简要说明:

方法

说明

initialize

在启动工作台(Workbench)前进行初始化。

这个方法有只有一个参数:

IWorkbenchConfigurer

preStartup

在初始化完成之后,打开第一个窗口之前调用,在这里可以对打开编辑器和视图的初始化参数进行设置。

postStartup

在所有窗口打开或恢复以后开始事件循环之前调用。

在这里可以进行一些类似自动批处理的工作。

preShutdown

在事件循环结束以后,关闭任何一个窗口之前调用

postShutdown

在所有窗口关闭之后,关闭工作台(Workbench)之前调用,可以用来保存当前应用的状态,清理initialize方法创建的内容

现在我们不需要对这个类进行任何修改。

 

ApplicationWorkbenchWindowAdvisor

ApplicationWorkbenchWindowAdvisor继承了WorkbenchWindowAdvisor类,这个类主要负责对WorbenchWindow进行控制,例如状态栏,工具条,标题,窗口尺寸等。

这个类中的方法在WorkbenchWindow的生命周期中起着重要作用。

方法

说明

preWindowOpen

在WorkBenchWindow的构造函数中调用,用于设置窗口的一些特征,如是否显示状态栏。

但是这个时候还没有创建任何窗体控件,所以在这里还不能引用它们。

postWindowRestore

在窗口恢复到以前保存的状态之后,打开窗口之前调用这个方法在新建窗口,Workbench第一次运行,以及没有保存窗口状态的情况下都不会调用。

在这里可以调用IWorkbench.close()方法关闭Workbench和所有打开的WorkbenchWindow。

postWindowCreate

在窗口创建以后,打开以前调用。

或者是窗口恢复到以前保存的状态后,在执行postWindowRestore方法之后调用

openIntro

Intro就是你第一次打开Eclispe的时候看到的内容,这个方法的默认的实现是:

如果IWorkbenchPreferences.SHOW_INTRO属性被设置为True,那么在第一次打开窗口的时候将会调用这个方法,在Intro显示过之后该属性将会设置为False。

后来,只有在WorkbenchConfigurer.getSaveAndRestore()方法返回True,并且关闭窗口时intro仍然显示的时候才会调用这个方法。

postWindowOpen

在Workbench窗口打开之后调用,可以在这里开/关(Tweak)窗体控件,例如设置Title,改变窗口尺寸等等。

preWindowShellClose

这个方法在Workbench窗口关闭之前(严格的讲是它的Shell被关闭之前)由关联到这个窗口的ShellListener调用。

如果窗口由于其他什么原因已经关闭了,则不会调用这个方法。

如果这个方法返回false,那么关闭Shell的请求将会被忽略,所以,这个是唯一的一个可以阻止用户关闭窗口行为的地方,也是提示用户是否保存当前工作和设置的最佳场所。

postWindowClose

在Workbench窗口关闭之后调用,这个时候窗口中的控件都已经被清除了。

在这里可以清除由postWindowOpen方法创建的内容。

createWindowContents

这个方法用来创建一个窗口的内容,默认的实现添加了一个菜单栏,一个工具条,一个状态栏,一个透视图栏,和一个快速视图栏。

这些控件的可见性可以使用IWorkbenchWindowConfigurer中的setShow*方法进行设置。

可以通过在子类中覆写(override)这个方法来实现自定义

的窗口内容和布局,但是必须要调用IWorkbenchWindowConfigurer.createPageComposite方法。

这个方法只有一个参数:

Shell。

createEmptyWindowContents

创建并且返回在窗口没有页面显示的时候要显示的控件。

如果返回的是Null,则会使用默认的窗口背景。

覆写这个方法可以实现自定义的窗口背景。

默认的实现是返回Null。

这个方法只有一个参数:

Composite

 

插件工程向导自动帮我们填充了createActionBarAdvisor和preWindowOpen方法体,在preWindowOpen方法中我们看到向导隐藏了窗口的工具条和状态栏,并且设置了窗口的大小和标题栏上显示的文字:

publicvoidpreWindowOpen(){

IWorkbenchWindowConfigurerconfigurer=getWindowConfigurer();

configurer.setInitialSize(newPoint(400,300));

configurer.setShowCoolBar(false);

configurer.setShowStatusLine(false);

//设置窗口标题栏文字

configurer.setTitle("HelloRCP");

}

 

在这个类的方法中常常需要使用到Configuer接口对窗口进行配置,在方法体中直接调用getWindowConfigurer()方法就可以直接获得IWorkbenchWindowConfigurer对象了,就像向导在preWindowOpen()中所做的一样。

 

ApplicationActionBarAdvisor

ActionBarAdvisor类继承了ActionBarAdvisor类。

这个类负责为WorkbenchWindow的ActionBar(菜单,工具条和状态栏等)创建Action。

也可以通过插件清单plugin.xml文件动态地提供action。

这个类中主要有下面几个方法:

方法

说明

参数

makeActions

创建在fill方法中使用的action,这个方法用来通过keybinding服务注册action并且添加到关闭窗口时要清除的action列表中。

IWorkbenchWindow

fillMenuBar

填充窗口的主菜单

IMenuManager

fillCoolBar

填充窗口的主工具栏

ICoolBarManager

fillStatusLine

填充窗口的主状态栏

IStatusLineManager

isApplicationMenu

这个方法在使用OLE对象做编辑的时候使用,根据传入的菜单ID返回指定的菜单是应用的菜单还是OLE对象的菜单。

在菜单合并期间,应当保留应用的菜单,至于其他的菜单最好可能从Window中删除掉。

String

 

 

 

现在我们不需要对这个类进行任何修改。

以上列出来的三个Advisor类中的方法基本上都是不能够在客户端直接调用的,而是由RCP框架调用的。

关于这一点在相应的API文档中有更为详细的说明。

插件工程向导自动为我们实现了Advisor子类必须实现的各个方法,根据实际需要我们可以覆写(override)以上各表中方法来实现我们的意图。

关于这些方法的详细资料请查询相应父类的API文档。

 

c)SimplebrowserPlugin类

Plugin类继承了AbstractUIPlugin抽象类并且是一个单例(singleton)类。

这个类提供了对插件Preferences,dialogstore和imageregistry的支持,前面两个对象提供了保存插件和对话框设置的有效途径,后者为整个插件提供了可能在插件中频繁使用的Image资源。

由此可以看出,这个类主要用来存储插件的全局信息。

由于是单例类,也是放置插件中其他类要用到的静态工具方法的好地方。

现在我们不需要对这个类进行任何修改。

 

d)Perspective类

这是RCP应用的默认的透视图。

实现了IPerspectiveFactory接口,并且通过org。

eclipse.ui.perspectives扩展点的className属性指定。

透视图是一套可见的视图,编辑器,和菜单等。

在RCP应用中,必须定义至少一个透视图并且设置为默认的透视图。

所有启动RCP应用后希望用户看到的视图或编辑器都必须在这个类的createInitialLayout方法中设置。

 

e)Plugin.xml文件

Plugin.xml文件是Eclipse的扩展点清单,这个文件用来定义和使用Eclipse扩展点。

扩展点是关联Eclipse插件的基本方式。

例如,这里的Application类就是通过org.eclipse.core.runtime.applications扩展点定义的。

Eclipse提供了插件清单编辑器,使用这个编辑器可以方便的修改plugin.xml文件的内容,使用这个编辑器可以减少手工编辑这个xml文件的工作和错误。

在使用插件向导创建完工程后你看到的就是这个编辑器。

 

f)build.properties文件

在导出插件的时候这个文件指定了要build的内容和相关资源的路径。

如果你向应用新增了一些资源,如图标文件,要记得把他们添加到build。

properties文件的bin.include一节中。

在插件清单编辑器的BuildConfiguration页面可以很方便的在导出应用前对这个文件进行配置。

 

二、添加视图

基本上HelloRCP模板创建的是一个空的RCP应用,要实现我们自己的应用界面就需要创建我们自己的视图(View)并且添加到当前的透视图中。

在这里我们使用了设计器。

 

1)创建视图

在这里我们用设计器来创建一个RCP视图:

在Eclispe中打开RCP插件工程,执行以下操作:

File->New->Other->Designer->RCP->ViewPart->Next

在这里,Name是指视图类的类名,视图名称是显示在视图标题中的文字,完成输入后点击Finish按钮。

Eclipse将会自动打开BrowserView视图类的源代码视图,点击Design选项卡进入设计器视图。

把SWTControls中的Browser控件拖到右边的RCP视图中,添加Browser控件。

在PropertyEdtor中选中container在下面的properites页中选择Layout为GridLayout(AWT),让浏览器控件自动充满整个视图。

 

2)添加视图到当前透视图中

没有添加到透视图中的视图是无法显示的。

打开Perspective类的源代码,这个类是我们默认的透视图。

在它的createInitialLayout方法中添加以下代码:

layout。

addView(BrowserView.ID,

IPageLayout.TOP,

IPageLayout.RATIO_MAX,

IPageLayout.ID_EDITOR_AREA);

把视图添加到当前透视图中。

 

3)添加视图的扩展点。

在刚才添加的代码中,layout的AddView方法是通过视图的ID(BrowserView.ID)来找到我们的视图的。

这个ID值存储在于插件清单的Extension中,Eclipse正是通过这些扩展点来管理插件的。

 

在包资源管理器(PackageExplorer)的树形视图中,双击plugin.xml文件打开插件清单编辑器,点击Extensions选项卡打开扩展点清单管理页面:

点击Add…按钮打开扩展点选择视图,

在扩展点清单中选中org.eclipse.ui.views扩展点,点击Finish按钮,回到插件清单编辑器,org.eclipse.ui.views扩展点已经添加到清单中。

选中刚才添加的org.eclipse.ui.views单击鼠标右键,new category新建一个视图分类,视图分类是用来分类和组织视图的,它有三个属性:

id,name和parentCategory,前两个属性用来唯一标识视图分类,后一个属性用来组织分类的树型结构。

建议至少为你的视图添加一个分类(Category)。

这里采用系统默认值。

以用样的方式,选中刚才添加的org.eclipse.ui.views单击鼠标右键,newview添加视图:

选中刚才添加的视图,在右边编辑视图扩展点的属性:

在Id一栏填写视图类中的ID值:

simplebrowser.views.BrowserView

(注:

习惯上,这个ID值和类的完整包路径是相同的。

在Name一栏填写要显示在视图标题栏上的名称:

SimpleBrowser

在Class一栏填写视图类(含包路径的完整类名):

simplebrowser.views.BrowserView

在icon一栏可以指定显示在视图标题栏上的图标(16X16象素)。

 

4)运行RCP应用

在OverView页面点击“LaunchanEclipseapplication”链接,你就会看到我们的视图已经显示出来了。

 

5)手工添加视图

如果你没有设计器,也可以通过直接继承org.eclipse.ui.part.ViewPart抽象类来创建视图类,并且使用和上面相同的方法把视图添加到当前透视图中。

 

6)使用添加扩展点向导添加视图

用上面的方式添加视图是因为设计器生成的代码比较简洁。

其实Eclipse提供了很好的模板和向导来创建和添加视图。

双击Plugin.xml文件打开插件清单编辑器,点击Extensions选项卡,进入扩展点清单页面:

点击Add…按钮添加扩展点:

选择org.eclispe.ui.views扩展点和SampleView模板,点击Next按钮:

勾选“Addtheviewtotheresourceperspective”点击Finish按钮,Eclipse将自动创建视图类并且添加相应的扩展点到插件清单中。

按照前面的方法在Perspective类的createInitialLayout方法中添加视图到透视图中,启动RCP就会看到新建的视图了。

 

7)一点润饰

在插件OverView页面点击“LanchanEclipseapplication”会发现透视图下方有一个空的视图区域,这是EditorArea,在Perspective类的createInitialLayout方法中添加layout。

setEditorAreaVisible(false);把它隐藏掉。

现在Perspective类的代码变成了这个样子:

publicclassPerspectiveimplementsIPerspectiveFactory{

publicvoidcreateInitialLayout(IPageLayoutlayout){

//关掉EditorArea,

//如果没有用到Editor的话,请执行这一句

//否则在透视图中会有一片空白。

layout。

setEditorAreaVisible(false);

//添加Browser视图

layout。

addView(BrowserView。

ID,

IPageLayout.TOP,

IPageLayout.RATIO_MAX,

IPageLayout.ID_EDITOR_AREA);

//添加SampleView视图

/*

Layout.addView("simplebrowser.views.SampleView",

IPageLayout.TOP,

IPageLayout.RATIO_MAX,

IPageLayout.ID_EDITOR_AREA);

*/

}

}

现在RCP打开的窗口的标题还是“HelloRCP”,在ApplicationWorkbenchWindowAdvisor类的preWindowOpen()方法中修改它,并且覆写父类的postWindowCreate()方法在应用启动后让窗口自动最大化:

代码如下:

/**

*这个方法将在WorkbenchWindow的构造函数中调用,

*可用来在创建窗口前设置窗口的选项:

*例如:

是否含有菜单栏,状态栏等。

*/

publicvoidpreWindowOpen(){

IWorkbenchWindowConfigurerconfigurer=getWindowConfigurer();

configurer.setInitialSize(newPoint(400,300));

configurer.setShowCoolBar(false);

configurer.setShowStatusLine(false);

//设置窗口标题栏文字

configurer.setTitle("SimpleBrowser");

}

/**

*这个方法在窗口恢复到以前保存的状态(或者新建一个窗口)之后,

*打开窗口之前(调用)。

*/

publicvoidpostWindowCreate(){

super。

postWindowCreate();

//设置打开时最大化窗口

getWindowConfigurer().getWindow().getShell().setMaximized(true);

}

现在运行RCP应用就顺眼多了。

 

三、发布应用

刚才建立的RCP应用现在还不能独立运行,要发布一个独立的RCP应用,你应当:

1)新建product文件,

File->New->Other->ProductConfiguration->Next->输入文件名->Finish

Eclispe将会创建一个新的productconfiguration文件并且自动打开productconfiguration编辑器。

在编辑器中进入OverView页面:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 判决书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1