四常用技术2进阶开发

上传人:cn****1 文档编号:589063554 上传时间:2024-09-09 格式:PPT 页数:48 大小:4.09MB
返回 下载 相关 举报
四常用技术2进阶开发_第1页
第1页 / 共48页
四常用技术2进阶开发_第2页
第2页 / 共48页
四常用技术2进阶开发_第3页
第3页 / 共48页
四常用技术2进阶开发_第4页
第4页 / 共48页
四常用技术2进阶开发_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《四常用技术2进阶开发》由会员分享,可在线阅读,更多相关《四常用技术2进阶开发(48页珍藏版)》请在金锄头文库上搜索。

1、Version 1.0周甫()Eclipse RCP(四四)常用技术常用技术(2)进阶开发进阶开发课程介绍课程介绍 本课程主要讲授本课程主要讲授本课程主要讲授本课程主要讲授EclipseEclipse及及及及RCPRCP进阶知识进阶知识进阶知识进阶知识 适用于适用于适用于适用于JavaJava开发工程师开发工程师开发工程师开发工程师 面向的学员是面向的学员是面向的学员是面向的学员是渴望了解渴望了解渴望了解渴望了解Eclipse RCPEclipse RCP的的的的各类开发工程师各类开发工程师各类开发工程师各类开发工程师 全部课程时间大约是全部课程时间大约是全部课程时间大约是全部课程时间大约是4

2、040分钟分钟分钟分钟2周甫()概概 要要菜单和工具栏托盘技术进度条状态栏(Job)属性监听器GCJFreeChart在线升级启动和停止Derby数据库3周甫()1 菜单和工具栏菜单和工具栏不同于SWT的菜单和工具栏需要分别创建menu和coolbar,RCP的菜单和工具栏的菜单项和工具项可以统一起来创建一个Action类即可,这点和JFace类似.从Action的行为上来看,一般做三件事:执行某个后台任务.打开一个对话框打开视图或者编辑器4周甫()创建创建Action创建一个Action需要继承自org.eclipse.jface.action.Action这个类,其代码结构为: publi

3、c class SimpleAction extends Action public SimpleAction() public void run() 在构造方法中构建这个Action,常用API有: setId(“*.*.*.SimpleAction”);/注册ACTION setText(“示例ActionALT+S”);/设置菜单文字及快捷键 setToolTipText(“示例Action”);/作为工具栏使用时的提示文本 setImageDescriptor(AbstractUIPlugin.imageDescriptorFormPlugin(“*.*.*.Demo”,”icons/

4、simpleaction.gif”);/设置图标 注意imageDescriptorFormPlugin方法需要2个参数:项目ID号,和图片文件名,实际上这是找到图片的绝对路径在run()方法中实现需要的业务代码,打开某个视图或者执行某个任务等等。5周甫()创建菜单创建菜单创建菜单的步骤:在ApplicationActionBarAdvisor类的makeAction()方法中实例化Action;在fileMenuBar()方法中将Action作为菜单项加入到菜单中.首先创建MenuManager(相当于顶级菜单,也可以作为子菜单用): MenuManager menuCodeParse =

5、new MenuManager(代码分析, codeParse); 参数为:菜单文本,菜单ID号将Action加入到MenuManager: menuUserOption.add(simpleaction);将MenuManager添加到菜单栏: menuBar.add(menuUserOption); menuBar是filemenuBar的参数.6周甫()创建工具栏创建工具栏在ApplicationActionBarAdvisor类的fillCoolBar()中将构建好的Action添加进来即可.如同菜单,工具栏也需要一个ToolBarManager来管理Action:ToolBarMan

6、ager toolBarManager = new ToolBarManager(SWT.FLAT);coolBar.add(toolBarManager); /coolBar是fillCoolBar的参数toolBarManager.add(simpleaction);SWT.FLAT设置工具栏的样式为平滑(工具项不凸出)如果工具项之间要分组可以用coolBar.add(new Separator()加根竖的分离线 7周甫()2 托盘技术托盘技术托盘(Tray)技术主要实现以下2个目的:程序启动或关闭(非退出)时自动最小化到Windows右下角的系统托盘区用户可以随时通过托盘打开程序,恢复窗

7、口.另外,托盘技术中应当关注的功能有:菜单项图标管理8周甫()托盘对象托盘对象*托盘对象的获取方法:Tray tray = getWindowConfigurer().getWindow().getShell().getDisplay().getSystemTray();如同Table等容器一样,Tray也是一个容器,给Tray添加内容就要用TrayItem对象来管理.给Tray添加托盘项(TrayItem): TrayItem trayItem = new TrayItem(tray, SWT.NONE);给TrayItem设置文字和图标: trayItem.setImage(Image-O

8、f-Tray); trayItem.setToolTipText(“托盘示例”); 然后将这段代码放置在ApplicationWorkbenchWindowAdvisor的postWindowOpen()方法中,因为需要创建Display后,程序窗口没打开之前托盘就能开始工作,即实现其目的之一。9周甫()托盘监听器托盘监听器现在托盘看起来:但它还不能做事,现在给托盘添加事件以实现托盘功能之二: 单击托盘图标打开程序trayItem.addListener(SWT.Selection,new Listener()public void handleEvent(Event event) /恢复程序

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

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

11、 ProgressMonitorDialog(Shell parent);ProgressMonitorDialog默认样式: SWT.BORDER | SWT.TITLE | SWT.APPLICATION_MODAL其运行示例:15周甫()ProgressMonitorDialog详解详解ProgressMonitorDialog重要方法:run(boolean fork, boolean cancelable, IRunnableWithProgress runnable); 调用这个方法,进度条才开始工作,其参数:fork 是否(true)在单独的线程中运行cancelable 对话框

12、的取消按钮是否可用runnable 是一个接口,需要我们来实现: IRunnableWithProgress rwp = new IRunnableWithProgress()public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException /操作代码;可见,这个接口的run()方法才是我们真正写代码的地方16周甫()IProgressMonitor APIIProgressMonitor常用方法:beginTask(String name, init totalWo

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

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

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

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

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

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

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

20、 int startAngle, 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)startAnglearcAngle29周甫()示例示例代码如下:Canvas drawing

21、= new Canvas(this,SWT.NONE);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););30周甫()7 JFreeChartJFreeChart是开

22、放源代码站点SourceF上的一个JAVA项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。这些不同式样的图表基本上可以满足开发中的要求。如图是一个柱状图的示例31周甫()下载下载JFreeChart下载地址: http:/www.jfree.org/jfreechart/download.html该公司主要产品:JFreeReport:报表解决工具JFreeChart:Java图形解决方案(Application/Applet/Servlet/Jsp)JCommon:JFreeReport和JFre

23、eChart的公共类库JFreeDesigner:JFreeReport的报表设计工具 而我们只需要下载JFreeChart即可,其中已经包含了JCommon.32周甫()使用使用JFreeChartJFreeChart的使用非常简单,其机制为: 先得到一个Dataset(数据),然后从它那里创造出一个Chart(图)。 (见Code16-18). 33周甫()配置配置JFreeChart按 05 Eclipse使用讲座(五)(插件安装与制作)将JFreeChart的jfrechart-1.0.9.jar和jcommon-1.0.12.jar2个包制作成插件。将插件复制到目标平台的plugin

24、s目录下.回到开发平台重读目标平台的插件(WindowsPreferencesTarget Platform).然后打开项目的plugin.xml在Dependencies标签页中将其添加到插件依赖中.JFreeChart配置完毕.34周甫()8 在线升级在线升级利用Eclipse提供的专门的Update组件,可以通过HTTP、WEB实现在线升级。要实现产品在线升级, 首先需要配置项目的update插件依赖项,步骤如下:Step 1.配置Dependencies插件依赖打开plugin.xml,切换到Dependencies页,Add.,在Plug-in Selection对话框中将:org.

25、eclipse.update.configuratororg.eclipse.update.coreorg.eclipse.update.uiorg.eclipse.update.scheduler4个插件添加进来,保存退出.Step 2. 配置产品的Configuration 打开产品配置(*.product)的Configuration页,点击Add Required Plug-ins,Eclipse会自动将org.eclipse.update.configurator、org.eclipse.update.core.win32等包添加到产品配置库中35周甫()创建创建Feature功能部

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

27、tion项目建成后将打开feature.xml,在Overview页的General Information中输入:Update Site URL: http:/localhost:8080/net.zoof.kayaka.update/Update Site Name: kayaka update site.39周甫()新建新建Update项目项目项目类型:NewProjectPlug-in DevelopmentUpdate Site Project.项目名称项目名称这个要勾选这个要勾选40周甫()映射映射Feature项目项目Update项目建好后会打开site.xml文件,Add Fe

28、ature选择映射的Feature项目,如图:然后Build,对选择的feature进行构建,构建好的文件将会放在项目的feature和plugin文件夹下。41周甫()Archives页页在site.xml的Archives页分别填写:URL:http:/localhost:8080/net.zoof.kayaka.update/Description: kayaka update site描述更新站点并指定更新站点的地址。42周甫()Update实体站点实体站点在tomcat/webapps下建立一个j2ee站点:net.zoof.kayaka.update(模板文件见附件)然后将$Ecl

29、ipse-workspacenet.zoof.kayaka.update下的所有文件复制到tomcat/webapps/net.zoof.kayaka.update下43周甫()Update Action在RCP项目中新建一个Update Action.这个Action或者作为系统菜单或者作为工具栏,方便用户傻瓜式在线升级软件.(见Code 19).在线升级站点URL当然也不能硬编码,这里可以用自建的RCP的系统属性文件覆盖默认的(默认的系统属性文件无内容),步骤如下:项目中新建立一个configuration文件夹,建立文件:config.ini(文件内容见Code 20).打开kayaka

30、.product,切换到Configuration页,配置config.ini文件,如图:44周甫()9 启动和停止启动和停止Derby数据库数据库启动和停止Derby数据库的代码见Code 21.启动数据库是应用启动前做好的事,所以加在Application.java中,如:public Object run(Object args) throws ExceptionDisplay display = PlatformUI.createDisplay();BootOrShutdownDerby.getInstance().bootDerbyServer(true); .关闭数据库则在工作台关

31、闭前,即ApplicationWorkbenchAdvisor.java中: public boolean preShutdown()BootOrShutdownDerby.getInstance().bootDerbyServer(false);return super.preShutdown();45周甫()附录一:中文化的问题附录一:中文化的问题如果最终产品中出现中文乱码的问题,可以如下方法解决:方法一.将项目的属性中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”重新导出产品即可46周甫()附录二:产品图标的问题附录二:产品图标的问题产品图标默认的使用Eclipse的图标,要更换图标使用一个小工具Resource Hacker即可,其下载地址:http:/

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号