您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 其它办公文档 > 05 Eclipse RCP(四)(常用技术)(2)(进阶开发)
Version1.0周甫(zoofchow@hotmail.com)EclipseRCP(四)常用技术(2)进阶开发周甫(zoofchow@hotmail.com)2课程介绍•本课程主要讲授Eclipse及RCP进阶知识•适用于Java开发工程师•面向的学员是渴望了解EclipseRCP的各类开发工程师•全部课程时间大约是40分钟周甫(zoofchow@hotmail.com)3概要•菜单和工具栏•托盘技术•进度条•状态栏(Job)•属性监听器•GC•JFreeChart•在线升级•启动和停止Derby数据库周甫(zoofchow@hotmail.com)41菜单和工具栏•不同于SWT的菜单和工具栏需要分别创建menu和coolbar,RCP的菜单和工具栏的菜单项和工具项可以统一起来创建一个Action类即可,这点和JFace类似.•从Action的行为上来看,一般做三件事:–执行某个后台任务.–打开一个对话框–打开视图或者编辑器周甫(zoofchow@hotmail.com)5创建Action•创建一个Action需要继承自org.eclipse.jface.action.Action这个类,其代码结构为:publicclassSimpleActionextendsAction{publicSimpleAction(){}publicvoidrun(){}}•在构造方法中构建这个Action,常用API有:setId(“***.***.***.SimpleAction”);//注册ACTIONsetText(“示例Action@ALT+S”);//设置菜单文字及快捷键setToolTipText(“示例Action”);//作为工具栏使用时的提示文本setImageDescriptor(AbstractUIPlugin.imageDescriptorFormPlugin(“**.**.**.Demo”,”icons/simpleaction.gif”));//设置图标注意imageDescriptorFormPlugin方法需要2个参数:项目ID号,和图片文件名,实际上这是找到图片的绝对路径•在run()方法中实现需要的业务代码,打开某个视图或者执行某个任务等等。周甫(zoofchow@hotmail.com)6创建菜单•创建菜单的步骤:–在ApplicationActionBarAdvisor类的makeAction()方法中实例化Action;–在fileMenuBar()方法中将Action作为菜单项加入到菜单中.•首先创建MenuManager(相当于顶级菜单,也可以作为子菜单用):MenuManagermenuCodeParse=newMenuManager(代码分析,codeParse);参数为:菜单文本,菜单ID号•将Action加入到MenuManager:menuUserOption.add(simpleaction);•将MenuManager添加到菜单栏:menuBar.add(menuUserOption);menuBar是filemenuBar的参数.周甫(zoofchow@hotmail.com)7创建工具栏•在ApplicationActionBarAdvisor类的fillCoolBar()中将构建好的Action添加进来即可.•如同菜单,工具栏也需要一个ToolBarManager来管理Action:ToolBarManagertoolBarManager=newToolBarManager(SWT.FLAT);coolBar.add(toolBarManager);//coolBar是fillCoolBar的参数toolBarManager.add(simpleaction);•SWT.FLAT设置工具栏的样式为平滑(工具项不凸出)•如果工具项之间要分组可以用coolBar.add(newSeparator())加根竖的分离线周甫(zoofchow@hotmail.com)82托盘技术•托盘(Tray)技术主要实现以下2个目的:–程序启动或关闭(非退出)时自动最小化到Windows右下角的系统托盘区–用户可以随时通过托盘打开程序,恢复窗口.•另外,托盘技术中应当关注的功能有:–菜单项–图标管理周甫(zoofchow@hotmail.com)9托盘对象*•托盘对象的获取方法:Traytray=getWindowConfigurer().getWindow().getShell().getDisplay().getSystemTray();•如同Table等容器一样,Tray也是一个容器,给Tray添加内容就要用TrayItem对象来管理.•给Tray添加托盘项(TrayItem):TrayItemtrayItem=newTrayItem(tray,SWT.NONE);•给TrayItem设置文字和图标:trayItem.setImage(Image-Of-Tray);trayItem.setToolTipText(“托盘示例”);然后将这段代码放置在ApplicationWorkbenchWindowAdvisor的postWindowOpen()方法中,因为需要创建Display后,程序窗口没打开之前托盘就能开始工作,即实现其目的之一。周甫(zoofchow@hotmail.com)10托盘监听器现在托盘看起来:但它还不能做事,现在给托盘添加事件以实现托盘功能之二:•单击托盘图标打开程序trayItem.addListener(SWT.Selection,newListener(){publicvoidhandleEvent(Eventevent){//恢复程序界面}});周甫(zoofchow@hotmail.com)11关闭程序窗口•关闭程序窗口而不是退出,只需要调用shell的setMinimized(true)和setVisible(false)即可.•调用的切入点在ApplicationWorkbenchWindowAdvisor的preWindowShellClose()中,•调用上述2个方法后shell仅仅只是隐藏而不会真的关闭了.周甫(zoofchow@hotmail.com)12加上菜单•如同系统菜单和工具栏一样,Tray的菜单项也是Action•给托盘添加右键菜单:trayItem.addListener(SWT.MenuDetect,newListener(){publicvoidhandleEvent(Eventevent){//若干Action}});•现在托盘基本上可以工作了.周甫(zoofchow@hotmail.com)13完整的托盘•更好的托盘(其中有一个定时提示的线程,如果不需要就将线程屏蔽):•见Code7~11.周甫(zoofchow@hotmail.com)143进度条•当需要较长时间的操作而用户无法与程序交互时,应该向用户显示一个进度条以提示正在操作及操作进度,这有利于提高用户的耐心,也是软件友好性的体现之一.•实现进度条可以用的有:–SWT的ProgressBar–JFace的ProgressMonitorDialog周甫(zoofchow@hotmail.com)15ProgressMonitorDialog•ProgressMonitorDialog构造方法:publicProgressMonitorDialog(Shellparent);•ProgressMonitorDialog默认样式:SWT.BORDER|SWT.TITLE|SWT.APPLICATION_MODAL其运行示例:周甫(zoofchow@hotmail.com)16ProgressMonitorDialog详解•ProgressMonitorDialog重要方法:–run(booleanfork,booleancancelable,IRunnableWithProgressrunnable);调用这个方法,进度条才开始工作,其参数:•fork是否(true)在单独的线程中运行•cancelable对话框的取消按钮是否可用•runnable是一个接口,需要我们来实现:•IRunnableWithProgressrwp=newIRunnableWithProgress(){•publicvoidrun(IProgressMonitormonitor)throwsInvocationTargetException,InterruptedException{•//操作代码•}•};可见,这个接口的run()方法才是我们真正写代码的地方周甫(zoofchow@hotmail.com)17IProgressMonitorAPI•IProgressMonitor常用方法:–beginTask(Stringname,inittotalWork);任务开始,必须调用的方法,其参数:•name:任务的名称,即前图的”“正在登录数据库,请稍候......”文字部分;•totalWork:大概的任务总数,如果无法估算,则用IProgressMonitor.UNKNOWN;–Done()任务完成–isCanceled()当前任务是否被取消–setCanceled(booleanvalue)设置任务的取消状态–subTask(String)子任务开始,其提示文字–worked(intwork)通知线程已经完成的任务数,如果任务数已知,则进度条前进1步周甫(zoofchow@hotmail.com)18进度条对话框示例*•任务数未知:•任务数已知:周甫(zoofchow@hotmail.com)19进度条模板•总结前面的过程,可以得出进度条对话框的模板:见Code12.周甫(zoofchow@hotmail.com)204状态栏•Eclipse状态栏位于窗口的底部,可以显示图标、文本信息和进度条(不同于ProgressMonitorDialog).•要使状态栏可见,ApplicationWorkbenchWindowAdvisor的preWindowOpen()方法中设置了configurer.setShowStatusLine(true);•状态栏常用区域:FastViews可以将视图拖入其中快速访问,或者临时信息Contributions附加信息JobsProgress执行的Job,形如进度条周甫(zoofchow@hotmail.com)21临时信息•在ApplicationWorkbenchWindowAdvisor中的postWindowOpen()方法中添加代码即可,示例如下:IstatusLineManagerstatusline=getWindowconfigurer().getActionBarConfigurer().getStatusLineManager();statusline.setMessage(Image-of-yours,”临时信息示例文字”);这段信息在刚打开时出现,激活某个视图后将消失周甫(zoofchow@hotmail.com)22Contributions•使用contributions区域,需要自定义一个扩展自ContributionItem的类,在该类的fill()方法中加入要显示的图片和文字.•然后改写ApplicationActionBarAdvisor的fillStatusLine(IStatusLineManagerstatusLine)方法,将自定义的类添加给statusLine即可.(见Code13)周甫(zoofchow@hotmail.com)23Job•除了进度条这种对于耗时较长的任务友好提示外,还有一种在状态栏中使用的进图条即Job.•一个Job可以看作是一个完成单一功能的处理单元,由Job管理器负责调度管理并可反复运行.周甫(zoofchow@hotmail.com)24示例•Job可以在视图内随处调用(见Co
本文标题:05 Eclipse RCP(四)(常用技术)(2)(进阶开发)
链接地址:https://www.777doc.com/doc-3132864 .html