常用技术2进阶开发.ppt

上传人:牧羊曲112 文档编号:6386744 上传时间:2023-10-26 格式:PPT 页数:48 大小:2.04MB
返回 下载 相关 举报
常用技术2进阶开发.ppt_第1页
第1页 / 共48页
常用技术2进阶开发.ppt_第2页
第2页 / 共48页
常用技术2进阶开发.ppt_第3页
第3页 / 共48页
常用技术2进阶开发.ppt_第4页
第4页 / 共48页
常用技术2进阶开发.ppt_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《常用技术2进阶开发.ppt》由会员分享,可在线阅读,更多相关《常用技术2进阶开发.ppt(48页珍藏版)》请在三一办公上搜索。

1、Eclipse RCP(四),常用技术(2)进阶开发,周甫(),2,课程介绍,本课程主要讲授Eclipse及RCP进阶知识适用于Java开发工程师面向的学员是渴望了解Eclipse RCP的各类开发工程师全部课程时间大约是40分钟,周甫(),3,概 要,菜单和工具栏托盘技术进度条状态栏(Job)属性监听器GCJFreeChart在线升级启动和停止Derby数据库,周甫(),4,1 菜单和工具栏,不同于SWT的菜单和工具栏需要分别创建menu和coolbar,RCP的菜单和工具栏的菜单项和工具项可以统一起来创建一个Action类即可,这点和JFace类似.从Action的行为上来看,一般做三件事

2、:执行某个后台任务.打开一个对话框打开视图或者编辑器,周甫(),5,创建Action,创建一个Action需要继承自这个类,其代码结构为:public class SimpleAction extends Action public SimpleAction()public void run()在构造方法中构建这个Action,常用API有:setId(“*.*.*.SimpleAction”);/注册ACTION setText(“示例ActionALT+S”);/设置菜单文字及快捷键 setToolTipText(“示例Action”);/作为工具栏使用时的提示文本 setImageDes

3、criptor(AbstractUIPlugin.imageDescriptorFormPlugin(“*.*.*.Demo”,”icons/simpleaction.gif”);/设置图标 注意imageDescriptorFormPlugin方法需要2个参数:项目ID号,和图片文件名,实际上这是找到图片的绝对路径在run()方法中实现需要的业务代码,打开某个视图或者执行某个任务等等。,周甫(),6,创建菜单,创建菜单的步骤:在ApplicationActionBarAdvisor类的makeAction()方法中实例化Action;在fileMenuBar()方法中将Action作为菜单项

4、加入到菜单中.首先创建MenuManager(相当于顶级菜单,也可以作为子菜单用):MenuManager menuCodeParse=new MenuManager(代码分析,codeParse);参数为:菜单文本,菜单ID号将Action加入到MenuManager:menuUserOption.add(simpleaction);将MenuManager添加到菜单栏:menuBar.add(menuUserOption);menuBar是filemenuBar的参数.,周甫(),7,创建工具栏,在ApplicationActionBarAdvisor类的fillCoolBar()中将构建

5、好的Action添加进来即可.如同菜单,工具栏也需要一个ToolBarManager来管理Action:ToolBarManager toolBarManager=new ToolBarManager(SWT.FLAT);coolBar.add(toolBarManager);/coolBar是fillCoolBar的参数toolBarManager.add(simpleaction);SWT.FLAT设置工具栏的样式为平滑(工具项不凸出)如果工具项之间要分组可以用coolBar.add(new Separator()加根竖的分离线,周甫(),8,2 托盘技术,托盘(Tray)技术主要实现以下

6、2个目的:程序启动或关闭(非退出)时自动最小化到Windows右下角的系统托盘区用户可以随时通过托盘打开程序,恢复窗口.另外,托盘技术中应当关注的功能有:菜单项图标管理,周甫(),9,托盘对象*,托盘对象的获取方法:Tray tray=getWindowConfigurer().getWindow().getShell().getDisplay().getSystemTray();如同Table等容器一样,Tray也是一个容器,给Tray添加内容就要用TrayItem对象来管理.给Tray添加托盘项(TrayItem):TrayItem trayItem=new TrayItem(tray,S

7、WT.NONE);给TrayItem设置文字和图标:trayItem.setImage(Image-Of-Tray);trayItem.setToolTipText(“托盘示例”);然后将这段代码放置在ApplicationWorkbenchWindowAdvisor的postWindowOpen()方法中,因为需要创建Display后,程序窗口没打开之前托盘就能开始工作,即实现其目的之一。,周甫(),10,托盘监听器,现在托盘看起来:但它还不能做事,现在给托盘添加事件以实现托盘功能之二:单击托盘图标打开程序trayItem.addListener(SWT.Selection,new List

8、ener()public void handleEvent(Event event)/恢复程序界面);,周甫(),11,关闭程序窗口,关闭程序窗口而不是退出,只需要调用shell的setMinimized(true)和setVisible(false)即可.调用的切入点在ApplicationWorkbenchWindowAdvisor的preWindowShellClose()中,调用上述2个方法后shell仅仅只是隐藏而不会真的关闭了.,周甫(),12,加上菜单,如同系统菜单和工具栏一样,Tray的菜单项也是Action给托盘添加右键菜单:trayItem.addListener(SWT.

9、MenuDetect,new Listener()public void handleEvent(Event event)/若干Action);现在托盘基本上可以工作了.,周甫(),13,完整的托盘,更好的托盘(其中有一个定时提示的线程,如果不需要就将线程屏蔽):见Code 711.,周甫(),14,3 进度条,当需要较长时间的操作而用户无法与程序交互时,应该向用户显示一个进度条以提示正在操作及操作进度,这有利于提高用户的耐心,也是软件友好性的体现之一.实现进度条可以用的有:SWT的ProgressBarJFace的ProgressMonitorDialog,周甫(),15,ProgressM

10、onitorDialog,ProgressMonitorDialog构造方法:public ProgressMonitorDialog(Shell parent);ProgressMonitorDialog默认样式:SWT.BORDER|SWT.TITLE|SWT.APPLICATION_MODAL其运行示例:,周甫(),16,ProgressMonitorDialog详解,ProgressMonitorDialog重要方法:run(boolean fork,boolean cancelable,IRunnableWithProgress runnable);调用这个方法,进度条才开始工作,其

11、参数:fork 是否(true)在单独的线程中运行cancelable 对话框的取消按钮是否可用runnable 是一个接口,需要我们来实现:IRunnableWithProgress rwp=new IRunnableWithProgress()public void run(IProgressMonitor monitor)throws InvocationTargetException,InterruptedException/操作代码;可见,这个接口的run()方法才是我们真正写代码的地方,周甫(),17,IProgressMonitor API,IProgressMonitor常用方

12、法:beginTask(String name,init totalWork);任务开始,必须调用的方法,其参数:name:任务的名称,即前图的”“正在登录数据库,请稍候.”文字部分;totalWork:大概的任务总数,如果无法估算,则用IProgressMonitor.UNKNOWN;Done()任务完成isCanceled()当前任务是否被取消setCanceled(boolean value)设置任务的取消状态subTask(String)子任务开始,其提示文字worked(int work)通知线程已经完成的任务数,如果任务数已知,则进度条前进1步,周甫(),18,进度条对话框示例*,

13、任务数未知:,任务数已知:,周甫(),19,进度条模板,总结前面的过程,可以得出进度条对话框的模板:见Code 12.,周甫(),20,4 状态栏,Eclipse状态栏位于窗口的底部,可以显示图标、文本信息和进度条(不同于ProgressMonitorDialog).要使状态栏可见,ApplicationWorkbenchWindowAdvisor的preWindowOpen()方法中设置了configurer.setShowStatusLine(true);状态栏常用区域:,Fast Views 可以将视图拖入其中快速访问,或者临时信息,Contributions 附加信息,Jobs Pro

14、gress执行的Job,形如进度条,周甫(),21,临时信息,在ApplicationWorkbenchWindowAdvisor中的postWindowOpen()方法中添加代码即可,示例如下:IstatusLineManager statusline=getWindowconfigurer().getActionBarConfigurer().getStatusLineManager();statusline.setMessage(Image-of-yours,”临时信息示例文字”);这段信息在刚打开时出现,激活某个视图后将消失,周甫(),22,Contributions,使用contri

15、butions区域,需要自定义一个扩展自ContributionItem的类,在该类的fill()方法中加入要显示的图片和文字.然后改写ApplicationActionBarAdvisor的fillStatusLine(IStatusLineManager statusLine)方法,将自定义的类添加给statusLine即可.(见Code 13),周甫(),23,Job,除了进度条这种对于耗时较长的任务友好提示外,还有一种在状态栏中使用的进图条即Job.一个Job可以看作是一个完成单一功能的处理单元,由Job管理器负责调度管理并可反复运行.,周甫(),24,示例,Job可以在视图内随处调用

16、(见Code14),周甫(),25,5 属性监听器,在RCP程序开发当中常常会遇到数据同步的问题,也就是说某个视图的数据发生改变,而其他视图能够响应这个改变.这里就要用到属性监听器,属性监听器的原理来自设计模式:观察者(详见:07 设计模式(五)(Observer观察者模式),周甫(),26,RCP的Observer,RCP中属性改变监听模式就是对Observer模式的一个实践.其大致原理是:在这个模式中有一个属性提供方(主题提供方),暴露一个属性(主题),另外有一个或者多个属性监听方(订阅者),当属性提供方的主题发生改变时,监听方收到改变作出相应操作.属性监听方需要实现IPropertyCh

17、angeListener接口,在方法propertyChange中给出操作处理.,周甫(),27,实现属性监听模式,步骤如下:建立一个管理属性监听方的类,这个类用于注册对主题感兴趣各个视图.如果属性发生改变就立刻通知各监听者(调用监听者实现的propertyChange()方法)(见Code 15)监听者将自己注册到属性监听者管理类.如:/监听属性改变 CurrentProjectPropertyChange.getInstance().addPropertyChangeListener(IConstants.VIEW_PIEDIAGRAM_ID,this);如果属性提供方的属性发生改变,就发

18、出通知:/激活所有监听项目改变的监听器相关事件 CurrentProjectPropertyChange.getInstance().firePropertyChangeListener();,周甫(),28,6 GC,当有特殊的需要比如特殊的按钮而SWT/JFace不能提供时,就可以用GC(Grphics Context)来自己设计控件或者其他需求.一些报表图形,可以用开源的图表工具来完成,但简单的如饼形图,可以采用GC来制作.,周甫(),29,GC API,用GC画饼形图,常用画曲线的方法:drawArc(int x,int y,int width,int height,int start

19、Angle,int arcAngle)x,y为左上角坐标width,height为曲线的宽度和长度startAngle为横方向开始弧度arcAngle为曲线画过的弧度如果width=height,则为圆形曲线画好后用以下方法填充颜色:fileArc(int x,int y,int width,int height,int startAngle,int arcAngle),x,y,窗口横座轴,窗口纵座轴,圆心坐标(x+widht,y+height),startAngle,arcAngle,周甫(),30,示例,代码如下:Canvas drawing=new Canvas(this,SWT.NON

20、E);drawing.addPaintListener(new PaintListener()public void paintControl(PaintEvent event)event.gc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE);event.gc.drawArc(50,50,200,160,60,210);event.gc.fillArc(50,50,200,160,60,210););,周甫(),31,7 JFreeChart,JFreeChart是开放源代码站点SourceF上的一个JAVA项

21、目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。这些不同式样的图表基本上可以满足开发中的要求。如图是一个柱状图的示例,周甫(),32,下载JFreeChart,下载地址:http:/该公司主要产品:JFreeReport:报表解决工具JFreeChart:Java图形解决方案(Application/Applet/Servlet/Jsp)JCommon:JFreeReport和JFreeChart的公共类库JFreeDesigner:JFreeReport的报表设计工具 而我们只需要下载JFreeCh

22、art即可,其中已经包含了JCommon.,周甫(),33,使用JFreeChart,JFreeChart的使用非常简单,其机制为:先得到一个Dataset(数据),然后从它那里创造出一个Chart(图)。(见Code16-18).,周甫(),34,配置JFreeChart,按 05 Eclipse使用讲座(五)(插件安装与制作)将JFreeChart的和个包制作成插件。将插件复制到目标平台的plugins目录下.回到开发平台重读目标平台的插件(WindowsPreferencesTarget Platform).然后打开项目的plugin.xml在Dependencies标签页中将其添加到插

23、件依赖中.JFreeChart配置完毕.,周甫(),35,8 在线升级,利用Eclipse提供的专门的Update组件,可以通过HTTP、WEB实现在线升级。要实现产品在线升级,首先需要配置项目的update插件依赖项,步骤如下:Step 1.配置Dependencies插件依赖打开plugin.xml,切换到Dependencies页,Add.,在Plug-in Selection对话框中将:4个插件添加进来,保存退出.Step 2.配置产品的Configuration 打开产品配置(*.product)的Configuration页,点击Add Required Plug-ins,Ecli

24、pse会自动将、等包添加到产品配置库中,周甫(),36,创建Feature功能部件项目,Eclipse产品由若干插件组成,每个插件包含提供产品具体功能的代码。产品的各个插件一起组合成功能部件。功能部件用于描述并组合产品的不同功能。功能部件只包含描述相关插件的更新信息,不包含任何代码。功能部件可以独立下载和安装的最小单元.,周甫(),37,新建Feature项目,选择NewProjectPlug-in DevelopmentFeature Project第一步中给Feature项目起个名字,一般和开发项目名相同加上.feature,周甫(),38,新建Feature项目第二步,第二步,勾选要升级

25、的项目或者插件,周甫(),39,修改General Information,项目建成后将打开feature.xml,在Overview页的General Information中输入:Update Site URL:Update Site Name:kayaka update site.,周甫(),40,新建Update项目,项目类型:NewProjectPlug-in DevelopmentUpdate Site Project.,项目名称,这个要勾选,周甫(),41,映射Feature项目,Update项目建好后会打开site.xml文件,Add Feature选择映射的Feature项目

26、,如图:然后Build,对选择的feature进行构建,构建好的文件将会放在项目的feature和plugin文件夹下。,周甫(),42,Archives页,在site.xml的Archives页分别填写:Description:kayaka update site描述更新站点并指定更新站点的地址。,周甫(),43,Update实体站点,在tomcat/webapps下建立一个j2ee站点:(模板文件见附件)然后将$Eclipse-workspace下的所有文件复制到tomcat/下,周甫(),44,Update Action,在RCP项目中新建一个Update Action.这个Action

27、或者作为系统菜单或者作为工具栏,方便用户傻瓜式在线升级软件.(见Code 19).在线升级站点URL当然也不能硬编码,这里可以用自建的RCP的系统属性文件覆盖默认的(默认的系统属性文件无内容),步骤如下:项目中新建立一个configuration文件夹,建立文件:config.ini(文件内容见Code 20).打开kayaka.product,切换到Configuration页,配置config.ini文件,如图:,周甫(),45,9 启动和停止Derby数据库,启动和停止Derby数据库的代码见Code 21.启动数据库是应用启动前做好的事,所以加在Application.java中,如:

28、public Object run(Object args)throws ExceptionDisplay display=PlatformUI.createDisplay();BootOrShutdownDerby.getInstance().bootDerbyServer(true);.关闭数据库则在工作台关闭前,即ApplicationWorkbenchAdvisor.java中:public boolean preShutdown()BootOrShutdownDerby.getInstance().bootDerbyServer(false);return super.preShut

29、down();,周甫(),46,附录一:中文化的问题,如果最终产品中出现中文乱码的问题,可以如下方法解决:方法一.将项目的属性中Info-Text file encoding设置为GBK.方法二.方法一如果还不能解决,则将GBK改成UTF-8,然后:plugin.xml右键菜单PDE ToolsCreate Ant Build File生成build.xmlplugin.xml的Build页,勾选Custom Build.打开build.xml找到节点,添加属性encoding=“utf-8”重新导出产品即可,周甫(),47,附录二:产品图标的问题,产品图标默认的使用Eclipse的图标,要更换图标使用一个小工具Resource Hacker即可,其下载地址:http:/,周甫(),48,附录三:附件,空白的j2ee站点:,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号