Eclipse RCP应用系统开发方法与实战.docx
- 文档编号:6593959
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:16
- 大小:74.85KB
Eclipse RCP应用系统开发方法与实战.docx
《Eclipse RCP应用系统开发方法与实战.docx》由会员分享,可在线阅读,更多相关《Eclipse RCP应用系统开发方法与实战.docx(16页珍藏版)》请在冰豆网上搜索。
EclipseRCP应用系统开发方法与实战
]EclipseRCP应用系统开发方法与实战1--RCP基本框架
2008-12-3013:
32:
46
标签:
[推送到技术圈]
5.1.3RCP基本框架
一个基本的RCP应用程序已经搭建起来,尽管还非常稚嫩,却已经初具雏形。
探究一下RCP的基本框架对于理解RCP大有好处。
从前面图5-6可以看出,Eclipse已经自动生成了Application.java、ApplicationActionBarAdvisor.java、ApplicationWorkbenchAdvisor.java、ApplicationWorkbench-WindowAdvisor.java、Perspective.java这5个类文件。
有必要对这5个文件进行分析,以便更深刻地理解RCP的基本框架。
在分析之前,先来简单理解一下几个基本概念。
1.基本概念
(1)Display
应用程序一般只需要一个Display对象,该对象实际上是一个SWT对象,代表了底层图形系统的实现。
Display的主要任务是事件处理,它负责从操作系统的事件队列中读取事件,传递给RCP的事件监听器以便完成具体的任务。
需要注意的是,Display对象不代表应用程序窗口的任何可视控件,在应用程序主窗口打开之前,Display是不可获得的。
应用程序主窗口打开之后,才可以通过一个被称作Shell的对象获得。
Display对象的获得方法如下。
Displaydisplay=newDisplay();
或者:
Displaydisplay=Display.getCurrent();
(2)Shell
每一个窗口都有一个Shell对象。
Shell对象代表了与用户交互的窗口框架,并处理与窗口关联的诸如移动、改变大小等常见行为。
Shell对象的获得方法:
Displaydisplay=Display.getCurrent();
Shellshell=newShell(display);
或者:
Shellshell=Display.getCurrent().getActiveShell();
(3)Workbench
Workbench是工作台,通俗地说就是代表用户界面的UI元素。
工作台上有各种窗口、图标、按钮和控件,用户可以在工作台上做各种操作。
获得工作台对象的方法:
IWorkbenchwb=PlatformUI.getWorkbench();
工作台对象有两个方法也许很有用:
l wb.restart(),关闭应用程序并立即重新启动。
l wb.close(),正常关闭应用程序,等同于ActionFactory.QUIT_ACTION。
(4)Advisor
Advisor是建议者,用户主界面宽度、高度、图标、菜单、工具栏、颜色、操作等等配置方案需要Advisor来提出“建议”。
Eclipse提供了3种类型的Advisor:
l WorkbenchAdvisor。
应用程序级别,Eclipse3.0开始引入的全新类。
每一个应用程序只有一个Workbench,WorkbenchAdvisor负责该工作台生命周期的管理,例如启动、关闭工作。
WorkbenchAdvisor也负责该Workbench的异常处理,并负责向Workbench提供一些重要参数,例如可以指定该Workbench的初始透视图。
l WorkbenchWindowAdvisor。
窗口级别。
每一个窗口都有一个WorkbenchWindow-Advisor实例。
WorkbenchWindowAdvisor负责具体窗口生命周期的管理,例如状态栏、工具栏、菜单、窗口标题、窗口大小和各种控件等等,也可以处理窗口的各种事件例程。
l ActionBarAdvisor。
窗口级别。
每一个窗口都有一个ActionBarAdvisor实例。
ActionBarAdvisor负责管理窗口的菜单栏、状态栏、工具栏的外观和行为。
(5)View和Editor
在EclipseRCP应用程序中,用户主要通过视图(View)和编辑器(Editor)来与程序交互。
视图是可以浮动的工作窗口,负责显示数据在某个层面的状态信息。
编辑器也是一种工作窗口,提供对数据进行各种操作的交互能力。
至于是使用视图还是使用编辑器,没有很严格的区分,取决于开发者和用户需求的考虑,例如,应用程序的界面可以毫无障碍地全部使用视图来实现。
经费测算系统只有公共参数设置功能模块使用编辑器实现,其他大部分界面均采用视图来实现。
视图扩展自ViewPart抽象类。
开发者通常需要在createPartControl()方法中编写代码,以便构建视图的界面元素。
下面是一个没有任何处理代码的简单视图。
packagecn.edu.jfcs.ui;
importorg.eclipse.swt.widgets.Composite;
importorg.eclipse.ui.part.ViewPart;
publicclassTeachUnitNameextendsViewPart{
publicTeachUnitName(){
//TODOAuto-generatedconstructorstub
}
publicvoidcreatePartControl(Compositeparent){
//TODOAuto-generatedmethodstub
}
publicvoidsetFocus(){
//TODOAuto-generatedmethodstub
}
}
(6)Perspective
Perspective与视图、编辑器之间的关系类似于书包和书、笔的关系。
书包里面可以放各种书和笔,书包是Perspective,而书和笔则类似于视图和编辑器。
Perspective被称之为透视图,RCP应用程序是通过透视图对窗口内容进行安排和布局的,应用程序都有一个默认的透视图,每个工作台窗口则可以包含一个或多个透视图,同时用户可向透视图中添加其他UI界面元素。
默认透视图被设置为固定的,不能移动,而且没有标题栏。
例如运行经费测算系统后,单击【Help】→【Welcome】,将在默认透视图中打开Welcome欢迎界面。
关闭该欢迎界面,就会显示一个没有标题栏、只有最小化最大化按钮的空界面,该界面即为默认的透视图。
透视图需要实现IPerspectiveFactory接口。
IPerspectiveFactory可以说是产生初始页面布局和可视性透视图的工厂。
在Eclipse中,工作台打开的任何新页面都需要一个透视图定义其初始布局。
具体说来,就是需要向透视图工厂传递一个IPageLayout对象,通过该对象安排视图或者编辑器的初始布局。
默认情况下,初始布局包含了一个可视的编辑区。
当然,该编辑区也可以关闭。
2.类文件分析
(1)Application.java
对于普通Java应用程序来说,总是有一个main()方法,应用程序总是从main()开始运行。
Application类似于Java应用程序的main(),即RCP应用程序运行开始于Application,Application是RCP应用程序的入口。
Application实现了IPlatformRunnable接口,在RCP启动的时候将会执行该接口的run()方法。
从plugin.xml可以获知,Application实际上是Eclipseorg.eclipse.core.runtime.applications运行时扩展点的一个入口。
Application主要代码如下:
cn.edu.jfcs.app/Application.java
import…
publicclassApplicationimplementsIPlatformRunnable{
publicObjectrun(Objectargs)throwsException{
Displaydisplay=PlatformUI.createDisplay();
try{
intreturnCode=PlatformUI.createAndRunWorkbench(display,
newApplicationWorkbenchAdvisor());
if(returnCode==PlatformUI.RETURN_RESTART){
returnIPlatformRunnable.EXIT_RESTART;
}
returnIPlatformRunnable.EXIT_OK;
}finally{
display.dispose();
}
}
}
可以把Application当作RCP应用程序的控制者,它负责应用程序的启动、停止。
Application首先创建一个Display对象,然后调用PlatformUI.createAndRunWorkbench()方法启动工作台,这将打开应用程序主窗口,并处于持续打开状态。
应用程序开始处理用户的鼠标单击、鼠标移动、按键等各种事件,一直到用户关闭程序退出,这就是所谓的事件循环。
当然,在关闭之前,必须销毁Display对象以释放资源(display.dispose())。
从上面的分析可以得到这样一个信息:
应用程序主窗口只有在语句“intreturnCode=PlatformUI.createAndRunWorkbench(display,newApplicationWorkbenchAdvisor());”调用之后才会打开并可视化。
开发人员可以利用这一点做做文章,例如在其前面加入启动登录窗口、启动Derby数据库服务器、初始化处理等等工作,代码类似于下面的形式。
……
//启动Derby数据库服务器
//打开登录界面
intreturnCode=PlatformUI.createAndRunWorkbench(display,
newApplicationWorkbenchAdvisor());
if(returnCode==PlatformUI.RETURN_RESTART){
returnIPlatformRunnable.EXIT_RESTART;
}
……
第6章中的实现用户登录处理,就是基于这种处理思路。
注意到PlatformUI.createAndRun-Workbench()方法中,除了display对象,还向其传递了另外一个对象:
newApplication-WorkbenchAdvisor(),那么ApplicationWorkbenchAdvisor又是做什么的?
(2)ApplicationWorkbenchAdvisor.java
ApplicationWorkbenchAdvisor类负责应用程序生命周期管理,继承自WorkbenchAdvisor类。
开发人员可以在该类中实现程序启动或者关闭时的某种处理。
该类的具体实现只是给用户一个初始的视图界面而已,还需要配合WorkbenchWindowAdvisor、ActionBarAdvisor才能构成一个较为完整的用户界面。
ApplicationWorkbenchAdvisor类主要有5个重要的方法,按照执行的先后顺序排列如表5-1所示。
表5-1ApplicationWorkbenchAdvisor主要方法
方法名
方法说明
initialize
最先调用。
在窗口打开之前调用,可以用来处理初始化配置工作
preStartup
initialize之后、第一个窗口打开之前调用,可以用来处理临时或者可选处理工作
postStartup
第一个窗口打开之后但启动事件循环之前调用,可以用来进行那些需要自动处理的工作,例如弹出一个提示窗口
preShutdown
事件循环结束之后但窗口关闭之前调用,可以用来进行保存数据、关闭数据库服务器等处理工作
postShutdown
窗口关闭之后调用,可以用来进行保存应用程序状态、清除initialize创建的对象等处理工作
ApplicationWorkbenchAdvisor.java主要代码如下。
cn.edu.jfcs.app/ApplicationWorkbenchAdvisor.java
import…
publicclassApplicationWorkbenchAdvisorextendsWorkbenchAdvisor{
privatestaticfinalStringPERSPECTIVE_ID="cn.edu.jfcs.perspective";
publicWorkbenchWindowAdvisorcreateWorkbenchWindowAdvisor(
IWorkbenchWindowConfigurerconfigurer){
returnnewApplicationWorkbenchWindowAdvisor(configurer);
}
publicvoidinitialize(IWorkbenchConfigurerconfigurer){
super.initialize(configurer);
configurer.setSaveAndRestore(true);
}
publicStringgetInitialWindowPerspectiveId(){
returnPERSPECTIVE_ID;
}
}
上述程序主要做了两件事情:
一是初始化需要在主界面显示的透视图(Perspective),创建并返回ApplicationWorkbenchWindowAdvisor对象。
二是初始化方法中代码configurer.setSaveAndRestore(true)用于设置应用程序每次退出时保存当前窗口状态,并在下次启动时应用,这对应用程序性能稍有影响,建议修改为false不保存。
getInitialWindowPerspectiveId()方法打开默认的透视图cn.edu.jfcs.perspective。
如果在初始化initialize事件中编写大量处理代码,会引起应用程序启动时主窗口的延迟显示,给用户以系统速度较慢的感觉。
因此,应该尽量避免。
(3)ApplicationWorkbenchWindowAdvisor.java
ApplicationWorkbenchWindowAdvisor类负责应用程序窗口生命周期的管理,该类扩展自WorkbenchWindowAdvisor。
每一个应用程序都需要一个WorkbenchWindowAdvisor来控制窗口界面的UI元素。
开发人员可以控制窗口创建时的大小、标题、位置等等,也可以添加创建、打开、还原或关闭工作台窗口时调用的方法。
ApplicationWorkbenchWindowAdvisor主要方法如表5-2所示。
表5-2ApplicationWorkbenchWindowAdvisor主要方法
方法名
方法说明
preWindowOpen
窗口控件创建之前调用,可以在该方法中设置窗口的初始大小、状态栏、工具栏等的可视性
postWindowRestore
当窗口根据上一次的保存状态恢复创建之后调用,可以用来调整调整窗口恢复状态
postWindowCreate
窗口创建之后调用,可以用于调整窗口
postWindowOpen
窗口已经打开之后调用,可以用来注册窗口监听,例如在此方法中实现系统托盘
下面我们来看看Eclipse自动生成的ApplicationWorkbenchWindowAdvisor.java主要代码如下:
cn.edu.jfcs.app/ApplicationWorkbenchWindowAdvisor.java
import…
publicclassApplicationWorkbenchWindowAdvisorextendsWorkbenchWindowAdvisor{
publicApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurerconfigurer){
super(configurer);
}
publicActionBarAdvisorcreateActionBarAdvisor(IActionBarConfigurerconfigurer){
returnnewApplicationActionBarAdvisor(configurer);
}
publicvoidpreWindowOpen(){
IWorkbenchWindowConfigurerconfigurer=getWindowConfigurer();
configurer.setInitialSize(newPoint(700,550)); //定义窗口初始化大小
configurer.setShowCoolBar(false); //不显示工具栏
configurer.setShowStatusLine(false); //不显示状态栏
configurer.setTitle("jfcs"); //窗口标题为jfcs
}
}
该类创建了一个ApplicationActionBarAdvisor对象,并通过preWindowOpen()方法方法配置窗口。
在preWindowOpen()方法中,首先生成了configurer对象,通过该对象配置窗口的大小、工具栏、状态栏、标题等可视化元素,也就是说控制窗口的外观。
默认状态下工具栏和状态栏都是隐藏的。
IWorkbenchWindowConfigurer是一个接口类,该接口类提供了很多set/get方法以便用户访问存取工作台窗口的配置。
实际上,大家可能也注意到了,每种类型的Advisor都有一个对应的configurer。
ApplicationWorkbenchAdvisor中的IWorkbenchConfigurer、ApplicationWorkbenchWindowAdvisor中的IWorkbenchWindowConfigurer、后面Application-ActionBarAdvisor中的IActionBarConfigurer,configurer是与工作台、窗口、菜单、工具栏和状态栏打交道的一座方便的桥梁。
(4)ApplicationActionBarAdvisor.java
ApplicationActionBarAdvisor.java类负责定义窗口的行为,该类扩展自ActionBarAdvisor。
具体地说,该类用于构建菜单栏、工具栏和状态行。
ActionBarAdvisor自然是负责菜单栏、工具栏和状态行的创建和注册。
ApplicationActionBarAdvisor主要方法如表5-3所示。
表5-3ApplicationActionBarAdvisor主要方法
方法名
方法说明
voidmakeActions(IWorkbenchWindowwindow)
注册菜单或者工具栏的动作
voidfillMenuBar(IMenuManagermenuBar)
添加菜单栏
voidfillCoolBar(ICoolBarManagercoolBar)
添加工具栏
voidfillStatusLine(IStatusLineManagerstatusLine)
添加状态栏
ApplicationActionBarAdvisor.java主要代码如下。
cn.edu.jfcs.app/ApplicationActionBarAdvisor.java
import…
publicclassApplicationActionBarAdvisorextendsActionBarAdvisor{
privateIWorkbenchActionintroAction;
publicApplicationActionBarAdvisor(IActionBarConfigurerconfigurer){
super(configurer);
}
protectedvoidmakeActions(IWorkbenchWindowwindow){
//利用ActionFactory动作工厂创建introAction
introAction=ActionFactory.INTRO.create(window);
register(introAction);
}
protectedvoidfillMenuBar(IMenuManagermenuBar){
MenuManagerhelpMenu=newMenuManager("&Help",
IWorkbenchActionConstants.M_HELP);
menuBar.add(helpMenu);
helpMenu.add(introAction);
}
}
该程序创建了一个帮助菜单栏,其子菜单所执行的动作采用Eclipse内置的ActionFactory.INTRO,执行该动作将显示Welcome欢迎画面。
(5)Perspective.java
Perspective类主要负责界面布局的安排。
Perspective.java代码如下。
cn.edu.jfcs.app/Perspective.java
import…
publicclassPerspectiveimplementsIPerspectiveFactory{
publicvoidcreateInitialLayout(IPageLayoutlayout){
StringeditorArea=layout.get
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Eclipse RCP应用系统开发方法与实战 RCP 应用 系统 开发 方法 实战