RCP系统开发.docx

上传人:b****6 文档编号:7742216 上传时间:2023-01-26 格式:DOCX 页数:22 大小:169.30KB
下载 相关 举报
RCP系统开发.docx_第1页
第1页 / 共22页
RCP系统开发.docx_第2页
第2页 / 共22页
RCP系统开发.docx_第3页
第3页 / 共22页
RCP系统开发.docx_第4页
第4页 / 共22页
RCP系统开发.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

RCP系统开发.docx

《RCP系统开发.docx》由会员分享,可在线阅读,更多相关《RCP系统开发.docx(22页珍藏版)》请在冰豆网上搜索。

RCP系统开发.docx

RCP系统开发

RCP系统开发收藏

 摘自:

从本章开始,将带领大家进入激动人心的EclipseRCP开发之旅。

本章先将经费测算系统的架子搭建起来,例如菜单、工具栏、主控界面等等,至于系统各功能的实现细节,在随后的章节中将层层剥开。

为了节省篇幅,从本章开始,对于大量需要导入的类,在程序代码中将予以省略。

本章将主要学习到以下技术实现:

l  创建RCP项目。

l  定制开发平台和目标平台。

l  定制窗口属性。

l  添加菜单和工具栏。

l  实现主界面透视图、视图。

l  实现系统托盘。

l  定时自动显示托盘气泡提示文本。

l  图片的缓冲处理。

l  品牌化应用程序。

5.1 新建RCP项目

为了方便后面工作,可先将以前所做的test项目删除。

在test项目上点击鼠标右键,选择【Delete】,在弹出的“ConfirmProjectDelete”对话框中单击【Yes】按钮即可。

如果要彻底删除,请选择“Alsodeletecontentsunder‘c:

"jfcs_workspace"test’”。

在新建RCP项目之前,先设置一下整个Eclipse系统默认文件输出组织方式。

选择主菜单【Window】→【Preferences…】,在弹出的“Preferences”对话框中展开Java,选中BuildPath,在Sourceandoutputfolder下单选Folders,再单击【Apply】按钮(一定要单击此按钮,而不是直接单击【OK】按钮),如图5-1所示。

这样设置的目的是将源文件和编译后的class目标文件分开存放,以方便管理。

图5-1 项目输出路径设置

5.1.1 创建经费测算项目

创建RCP项目时,Eclipse提供了向导方式,并内置了3种RCP模板,整个工作简单而又轻松,具体步骤如下:

(1)单击鼠标右键,选择【New】→【Project…】,在弹出的对话框中选择【Plug-inProject】,单击【Next】按钮,在Projectname后输入项目名称cn.edu.jfcs。

项目名称习惯上命名为公司域名+产品名称的倒序,这样可以比较好的避免与他人产品名称重复。

例如:

cn.edu.hust.gzgl,表示华中科技大学工资管理系统项目。

单击【Next】按钮,弹出如图5-2所示的对话框,要求用户指定ID、Version、Name等信息。

Plug-inProvider可以输入作者名称或者公司名称。

Classpath要求指定类文件夹名称,一般针对插件项目,对于RCP项目来说,可以不指定。

不需要勾选Plug-inOptions下的“Generateanactivator,aJavaclassthatcontrolstheplug-in’slifecycle”,对于RCP来说并不需要生成一个激活器类来控制插件的生命周期。

选中RichClientApplication中的Yes。

图5-2 插件配置

(2)单击【Next】按钮,Eclipse提供了3种RCP模板以供选择。

选中“RCPapplicationwithanintro”模板。

该模板启动时会带有欢迎画面。

(3)单击【Next】按钮,弹出“NewRCPProjectwithanintro”对话框。

将ProductName修改成jfcs,其他不需要修改。

单击【Finish】按钮,项目创建完成。

现在修改一下项目的包名。

展开项目src文件夹,向导默认创建的包名为cn.edu.jfcs.intro,这个包名的含义有些含混不清,并不是希望的结果。

将该包名修改成更有意义的cn.edu.jfcs.app似乎更好。

修改包名需要用到Eclipse的重构(Refactor)功能。

重构简单说来就是将程序中的元素,例如某个类,重新命名,并自动更新相关的应用。

设想一下,如果希望将某个类重新命名,但这个类可能在很多地方引用,如果没有重构功能,得到全部类中搜寻,这项工作不但费力而且痛苦不堪,关键是辛苦半天可能还有遗漏!

Eclipse的重构功能受到了开发人员的热烈欢迎,一个常用的例子是Rename重构,Rename重构可以对属性、变量、类以及接口等重新命名,并自动更改全部引用而不会遗漏。

实际上Rename重构只是Eclipse重构的一种,Eclipse重构还可以实现将一个类中的方法或者属性移到子类或者父类中,或者改变类内部的代码,例如将某个方法中的代码抽取出来变成一个独立的方法。

善用重构功能,可以减轻一定的编程工作量。

在包名cn.edu.jfcs.intro上单击鼠标右键,选择【Refactor】→【Rename…】,弹出“RenamePackage”对话框,在Newname后的文本框中输入新包名cn.edu.jfcs.app,单击【OK】按钮即可。

现在可以试运行经费测算程序,体验一下RCP程序。

单击如图5-3所示的项目Overview概览视图中的“LaunchanEclipseapplication”,将首先弹出splash闪屏画面,然后显示如图5-4所示的系统主界面。

该界面自带了Help菜单,并有一个简单的Welcome欢迎界面。

       

                 图5-3 项目概览视图                              图5-4 项目运行主界面

项目的运行实际上还有更快捷的方式。

单击如图5-5所示的工具栏Run图标按钮,即可运行jfcs项目。

注意到,该运行图标按钮的提示文本是“RunEclipseApplication”,换成有意义的提示更好。

因为一旦项目很多,工具按钮的提示文本就可能使人不得要领。

选择系统菜单的【Run】→【Run…】,在弹出对话框的Name文本框中输入“jfcs”,单击【Apply】按钮,再单击【Close】。

现在鼠标指向Run图标按钮,提示文本变为“Runjfcs”。

图5-5 工具栏Run图标按钮

5.1.2 项目的组织结构

在第1章曾经讨论到,EclipseRCP基于组件架构,该组件架构的最基本单元被称之为插件(Plug-in),插件则通过插件扩展点(Extensionpoint)定义。

在Eclipse里面,“万物皆插件”。

所谓的RCP,不过是插件及其支撑内核的集合而已,只不过最后需要打包成产品发布。

开发者只需要在Eclipse内核基础上,定义并实现一个一个的插件,就可以组装成RCP。

所以,在前面创建经费测算项目时,选择“Plug-inProject”,也就不足为怪了。

也就是说,高校经费测算项目实际上就是一个大的插件!

你可以认为Eclipse是花瓶,插件是一朵一朵的花,就看你需要向花瓶中插入哪些花了。

图5-6是项目组织结构。

图5-6 项目组织结构

还记得前面项目运行时出现的闪屏画面吧,该画面就是由splash.bmp文件指定的。

闪屏图片必须是bmp格式的图片,一旦删除该文件,或者更改文件名称,将不会出现闪屏画面。

另外,图5-6中的introContent.xml、content文件夹用于定制程序启动主界面中的Welcome欢迎画面(见图5-4)。

可以按照自己的需要修改欢迎画面,关于闪屏画面的制作将在第7章详细说明。

下面认识一下项目组织结构的各个部分。

1.src

src文件夹存放了项目的源程序,那么编译后的class文件在哪儿?

项目组织结构中并没有列出,实际保存在bin文件夹下。

回想一下,在本章一开始就设置了系统默认文件输出组织方式(见图5-1)。

今后操作过程中应该知道在哪里找源代码,在哪里找class文件。

2.JRESystemLibrary

该文件夹存放系统类库文件。

Eclipse已经自动帮你导入了相关类库,你可以展开看看项目需要哪些类库。

3.Plug-inDependences

该文件夹存放插件依赖类库文件。

可以展开看看当前项目需要哪些插件才能正常运行。

不过,要更为直观地查看插件依赖,请双击build.properties文件,在打开的Overview概览视图中再单击Dependencies页,如图5-7所示。

可以看到现在的项目需要org.eclipse.ui.intro、org.eclipse.core.runtime、org.eclipse.ui这三个核心插件。

这三个插件实际上还需要依赖其他插件,怎么查看依赖关系?

单击“DependencyAnalysis”插件依赖性分析,再单击“Showtheplug-independencyhierarchy”,如图5-8,Eclipse会给出非常详细的插件依赖关系说明。

    

              图5-7 插件依赖项                             图5-8 插件依赖关系明细

4.MANIFEST.MF

MANIFEST.MF文件对当前插件(项目)进行描述,并可定义与其他插件的关系,也就是插件的原数据。

该文件一般不需要修改。

双击该文件可以查看具体情况,类似于图5-9中所示。

图5-9 MANIFEST.MF

在MANIFEST.MF中定义了版本、插件的ID号、插件的依赖项(Require-Bundle)等等。

singleton为true表示该插件项目只能有唯一版本,该参数是为了解决同一名称插件的多版本并存问题。

Eclipse-LazyStart项比较有意思。

Eclipse-LazyStart用于指定当前插件的启动方式,具体说就是当插件中的类或者资源被访问时,该插件是否自动启动。

Eclipse-LazyStart允许Eclipse以一种“惰激活”(懒加载)的方式启动插件,即插件被访问时才启动,不访问不启动。

这岂不很妙,RCP应用程序就可以在启动时只需要加载尽可能少的必需插件。

因此,设置为true可以提升启动速度。

5.build.properties

build.properties用来配置插件的编译信息,即定义与项目打包时(构建)相关的属性定义。

可以利用该文件,将项目打包运行时所需要的部件或插件包含进来,如下所示形式:

source..=src/

output..=bin/

bin.includes=plugin.xml,"

              META-INF/,"

              .,"

              content/,"

              splash.bmp,"

introContent.xml

前面两句指定项目打包时源文件和class文件的输出文件夹,bin.includes则指定了项目打包时所包含的文件夹或者文件,例如闪屏图片splash.bmp。

通常情况下项目总是有很多修饰图标或图片,一般放置在项目的icons文件夹下。

如果没有该文件夹,输出产品后在需要显示图标的地方就会显示Eclipse默认的图标(红盒子)。

解决方法当然很简单,可以在build.properties最末尾加入“icons/”。

如果是在中间加入,则应该是“icons/,"”形式。

6.plugin.xml

前文中已经简单提到插件是通过扩展点(Extensionpoint)来定义的。

扩展点是插件提供服务的入口,有点类似于Java中的接口。

例如宾馆服务员张三(插件)为顾客李四(插件)提供服务,张三定义好了一个服务契约扩展点,这样一来李四通过扩展点就知道如何获取服务、可以有哪些服务了。

Eclipse采用了完全开放的扩展点机制,开发人员可以在任何觉得可能被扩展的地方定义扩展点,以方便其他人扩展系统的功能,例如添加工具栏、菜单等等。

这样一来,系统的开放程度主要取决于扩展点多少了。

扩展点信息保存在plugin.xml文件中。

下面是一个菜单的扩展点定义。

      point="org.eclipse.ui.actionSets">

   

         id="cn.edu.jfcs.actionSet"

         label="SampleActionSet"

         visible="true">

      

            id="sampleMenu"

            label="扩展点测试">

         

      

      

            class="cn.edu.jfcs.actions.SampleAction"

            icon="icons/sample.gif"

            id="cn.edu.jfcs.actions.SampleAction"

            label="单击试试"

            menubarPath="sampleMenu/sampleGroup"

            toolbarPath="sampleGroup"/>

   

 

l  org.eclipse.ui.actionSets是工具栏或者菜单的操作集扩展点。

l  项定义了操作集的标识、名称和可视性。

l  

项定义了菜单的标识、名称。

l  项定义了下拉菜单项的类名(没有编写,选中时执行的任务)、图标、标识、名称、路径等等。

将上述代码复制粘贴到plugin.xml文件的前面,保存并运行看看!

现在多了一个【扩展点测试】菜单,单击其下的子菜单项【单击试试】,将弹出一个“Information”对话框,提示“Thechosenoperationisnotcurrentlyavailable.”(选择的操作当前不可用)。

这是因为cn.edu.jfcs.actions.SampleAction还没有编写。

试验完毕后,记得将该扩展点从plugin.xml文件中删除。

当然Eclipse的扩展点较多,读者可以参考Eclipse自带的帮助或者其他书籍进行学习。

5.1.3 RCP基本框架

一个基本的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();

        }

    }

}

可以把A

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

当前位置:首页 > 小学教育 > 语文

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

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