RCP中文入门教程.docx
- 文档编号:7714937
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:23
- 大小:490.63KB
RCP中文入门教程.docx
《RCP中文入门教程.docx》由会员分享,可在线阅读,更多相关《RCP中文入门教程.docx(23页珍藏版)》请在冰豆网上搜索。
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页面:
在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- RCP 中文 入门教程