前面讲到了从eclipse平台下直接导出的rcp应用程序模板中核心类的功能。在项目的研发过程中,不同的窗体总体上代表了不同的功能。因此,我们有时需要调用另外一个工作台窗体窗体来表现另外一个系统模块的功能,而这个活动窗体也需要像需要像主窗体一样,要展示对应的导航树,鹰眼图等,需要在子窗体和主窗体中切换。怎么实现这个功能呢? <o:p></o:p>
调用另外一个工作台窗体(活动的),实际上就是新生成一个新的工作台窗体,并给这个新的工作台窗体配置相关的菜单、工具栏。前面讲到,我们在Rcp的核心类Application里已经生成了一个工作台,我们需要打开在此基础上新打开一个工作台窗体,具体的方式如下:<o:p></o:p>
PlatformUI.getWorkbench().openWorkbenchWindow(null);<o:p></o:p>
然后,我们在为这个WorkbenchWindow来配置一些菜单,工具栏,就达到我们的要求了。<o:p></o:p>
<o:p> </o:p>
下面,我们详细的说明是如何实现这些功能的:<o:p></o:p>
在3.1版本以后,前面讲到要生成一个工作台窗体,调用了Application,WorkbenchAdvisor,WorkbenchWindowAdvisor,ActionBarAdvisor。处了Application用来创建工作台,其他的类都用来配置工作台窗体,我们新打开一个工作台窗体时,也需要用这些类来配置工作台窗体。WorkbenchAdvisor,WorkbenchWindowAdvisor不用重新定义,用来配置新工作台窗体菜单、工具栏,我们则必须另外实现接口ActionBarAdvisor了。
于是,我们引入了一个新类,WorkbenchActionBuilder,通过这个类,我们来调用不同窗体actionbar生成器(即实现不同窗体的菜单、工具栏)。<o:p></o:p>
package com.jdenght.rcpstudy.action;<o:p></o:p>
<o:p> </o:p>
import org.eclipse.ui.application.ActionBarAdvisor;<o:p></o:p>
import org.eclipse.ui.application.IActionBarConfigurer;<o:p></o:p>
import org.eclipse.ui.application.WorkbenchWindowAdvisor;<o:p></o:p>
import com.jdenght.rcpstudy.MainActionBarAdvisor;<o:p></o:p>
import com.jdenght.rcpstudy.Child_1_ActionBarAdvisor;<o:p></o:p>
<o:p> </o:p>
public final class WorkbenchActionBuilder {<o:p></o:p>
private IActionBarConfigurer Ibarconfigurer;<o:p></o:p>
private WorkbenchWindowAdvisor workbenchWindowAdvistor;<o:p></o:p>
private ActionBarAdvisor actionBarAdvisor;<o:p></o:p>
<o:p> </o:p>
public WorkbenchActionBuilder(IActionBarConfigurer Ibarconfigurer) {<o:p></o:p>
this.Ibarconfigurer = Ibarconfigurer;<o:p></o:p>
}<o:p></o:p>
<o:p></o:p>
public ActionBarAdvisor makeWinAction(){ <o:p></o:p>
switch(WorkbenchControler.flag){<o:p></o:p>
case WorkbenchControler.main:<o:p></o:p>
actionBarAdvisor = new MainActionBarAdvisor(Ibarconfigurer);<o:p></o:p>
break;<o:p></o:p>
case WorkbenchControler.child_1:<o:p></o:p>
actionBarAdvisor = new Child_1_ActionBarAdvisor(Ibarconfigurer);<o:p></o:p>
break;<o:p></o:p>
case WorkbenchControler.child_2:<o:p></o:p>
actionBarAdvisor = new MainActionBarAdvisor(Ibarconfigurer);<o:p></o:p>
break;<o:p></o:p>
}<o:p></o:p>
return actionBarAdvisor;<o:p></o:p>
}<o:p></o:p>
<o:p></o:p>
public void dispose() {<o:p></o:p>
workbenchWindowAdvistor.dispose();<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
如上所述,当当前打开的为主窗体时,调用MainActionBarAdvisor,为主窗体来配置菜单、工具栏等,当当前打开的为子窗体时,调用一个子窗体的菜单、工具栏生成类Child_1_ActionBarAdvisor。<o:p></o:p>
于是,有人会提到,我们在哪里调用WorkbenchActionBuilder这个类呢,这个类怎样让它调用不同的工具栏生成器呢?WorkbenchControler有什么作用呢?<o:p></o:p>
这个类是在WorkbenchWindowAdvisor的实现类中调用的,让我们来看看代码:<o:p></o:p>
package com.jdenght.rcpstudy;<o:p></o:p>
<o:p> </o:p>
import org.eclipse.ui.application.ActionBarAdvisor;<o:p></o:p>
import org.eclipse.ui.application.IActionBarConfigurer;<o:p></o:p>
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;<o:p></o:p>
import org.eclipse.ui.application.WorkbenchWindowAdvisor;<o:p></o:p>
import com.jdenght.rcpstudy.action.WorkbenchActionBuilder;<o:p></o:p>
<o:p> </o:p>
public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {<o:p></o:p>
<o:p> </o:p>
private WorkbenchActionBuilder fActionBuilder;<o:p></o:p>
public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {<o:p></o:p>
super(configurer);<o:p></o:p>
}<o:p></o:p>
<o:p> </o:p>
public ActionBarAdvisor createActionBarAdvisor(<o:p></o:p>
IActionBarConfigurer configurer) {<o:p></o:p>
if (fActionBuilder == null)<o:p></o:p>
fActionBuilder = new WorkbenchActionBuilder(configurer);<o:p></o:p>
return fActionBuilder.makeWinAction();<o:p></o:p>
}<o:p></o:p>
<o:p> </o:p>
public void preWindowOpen() {<o:p></o:p>
IWorkbenchWindowConfigurer configurer = getWindowConfigurer();<o:p></o:p>
// configurer.setShowCoolBar(true);<o:p></o:p>
// configurer.setShowStatusLine(true);<o:p></o:p>
configurer.setTitle("网络资源管理系统");<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
在rcp应用程序学习一中,在createActionBarAdvisor()是这样定义的:<o:p></o:p>
return new ApplicationActionBarAdvisor(configurer);<o:p></o:p>
它直接返回了一个菜单栏,工具栏的生成器。现在,我们让fActionBuilder.makeWinAction()来返回对应的当前窗体需要的actionbar(菜单,工具栏)生成器了。<o:p></o:p>
下面,我们在看看WorkbenchControler里有什么:<o:p></o:p>
import org.eclipse.ui.IWorkbenchWindow;<o:p></o:p>
import org.eclipse.ui.PlatformUI;<o:p></o:p>
<o:p> </o:p>
public class WorkbenchControler {<o:p></o:p>
//不同的工作台窗体代表的值<o:p></o:p>
public final static int main = 1;<o:p></o:p>
public final static int child_1 = 2;<o:p></o:p>
public final static int child_2 = 3;<o:p></o:p>
分享到:
相关推荐
10.1 在RCP上构建应用程序的 理由...... 235 10.1.1 给企业带来的好处..... 235 10.1.2 给软件开发者带来的 好处..... 236 10.1.3 给用户带来的好处..... 236 10.2 复习Eclipse体系结构...... 237 10.2.1 Eclipse...
10.1 在RCP上构建应用程序的 理由...... 235 10.1.1 给企业带来的好处..... 235 10.1.2 给软件开发者带来的 好处..... 236 10.1.3 给用户带来的好处..... 236 10.2 复习Eclipse体系结构...... 237 ...
10.1 在RCP上构建应用程序的 理由...... 235 10.1.1 给企业带来的好处..... 235 10.1.2 给软件开发者带来的 好处..... 236 10.1.3 给用户带来的好处..... 236 10.2 复习Eclipse体系结构...... 237 ...
内容概要:本文详细介绍了如何利用A*算法改进传统的往返式路径规划,解决扫地机器人在复杂环境中容易卡住的问题。首先构建了一个可视化的栅格地图用于模拟环境,然后引入了优先级运动规则,使机器人能够有规律地进行往返清扫。当遇到死角时,通过A*算法计算最佳逃生路径,确保机器人能够顺利脱困并继续完成清扫任务。实验结果显示,改进后的算法显著提高了清洁覆盖率,降低了路径重复率。此外,还讨论了一些潜在的优化方向,如动态调整启发函数权重、断点续传以及能耗模型等。 适合人群:对路径规划算法感兴趣的科研人员、自动化专业学生、扫地机器人开发者。 使用场景及目标:适用于需要高覆盖率和低重复率的室内清洁任务,旨在提高扫地机器人的工作效率和智能化水平。 其他说明:文中提供了详细的Matlab代码实现,并附带了仿真测试结果,有助于读者理解和复现该算法。
爬取喜马拉雅听书(1)
安卓向上传递数据学习笔记总结
1、文件说明: Centos8操作系统tigervnc-selinux-1.11.0-9.el8.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf tigervnc-selinux-1.11.0-9.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm
内容概要:本文详细介绍了户外储能电源双向逆变器板的技术资料及其特点。涵盖原理文件、PCB文件、源代码、电感与变压器规格参数等,适用于2KW(最大3KW)的户外储能电源。文中强调了双向软开关DC-DC设计、两颗M0+ 32位MCU的分工、SPWM调制方式、H桥IGBT的应用、详细的电气参数和技术特性。此外,还包括了SPWM信号生成代码示例、硬件设计细节、生产注意事项等。 适合人群:从事户外储能电源开发的技术人员、电子工程师、产品经理等。 使用场景及目标:帮助开发者快速掌握双向逆变器板的设计和生产要点,缩短产品研发周期,提高产品质量和可靠性。具体应用场景包括但不限于户外应急电源、便携式储能设备等。 其他说明:本文提供了丰富的技术细节和实践经验,如双向软开关DC-DC设计、SPWM调制、IGBT驱动、EMC整改记录等,有助于解决实际开发中的难题。同时,附带的实际案例展示了该方案的成功应用,进一步证明了其可行性和优越性。
电子仿真教程,从基础到精通,每个压缩包15篇教程,每篇教程5000字以上。
内容概要:美国计算机学会(ACM)是一个成立于1947年的国际性计算机专业组织,致力于推动计算机科学的发展,提供教育、资源和专业发展机会。ACM的使命是促进计算机科学和信息技术领域的进步,愿景是成为全球计算机专业人士的首选组织。其核心价值包括卓越、诚信、包容性、合作和创新。ACM定期举办学术会议,如SIGGRAPH和图灵奖颁奖典礼,出版高质量的学术期刊和会议论文集,涵盖人工智能、软件工程、网络安全等领域。此外,ACM还提供在线课程、研讨会、认证项目等教育资源,以及职业规划、网络机会和领导力培训等职业发展服务。ACM图灵奖被誉为“计算机界的诺贝尔奖”,每年颁发给对计算机科学和技术做出重大贡献的个人。; 适合人群:计算机科学领域的专业人士、教育工作者、工程师和学生。; 使用场景及目标:①了解计算机科学领域的最新研究成果和发展趋势;②获取高质量的教育资源和职业发展机会;③参与计算机科学领域的学术交流和合作。; 其他说明:ACM作为一个全球性的组织,在教育、研究和行业实践中发挥着重要作用,推动了技术创新和社会进步。
logstash-8.17.4-windows-x86_64.zip
springboot 一个基于Springboot使用Aspect实现一个切面,以记录日志为例
音箱底部折边设备sw22可编辑_三维3D设计图纸_包括零件图_机械3D图可修改打包下载_三维3D设计图纸_包括零件图_机械3D图可修改打包下载.zip
内容概要:本文详细介绍了如何使用Python、Django和MySQL构建一个完整的个性化图书推荐系统。系统从前端界面设计、后端逻辑实现到数据库设计,涵盖了用户管理、图书管理、评分系统等功能模块。重点讲解了基于用户和项目的协同过滤算法实现,以及在用户评分数据不足时的标签推荐备份方案。此外,还包括了系统部署、测试和优化的具体步骤,如云服务器部署、性能测试、数据库优化等。 适合人群:具备一定Python和Web开发基础的研发人员,尤其是对推荐系统感兴趣的技术爱好者。 使用场景及目标:适用于希望深入了解图书推荐系统的工作原理和实现细节的技术人员。目标是帮助读者掌握从零开始搭建一个完整的个性化推荐系统的方法,包括前后端开发、算法实现和系统部署。 其他说明:文中提供了大量代码示例和实战经验,如数据库设计、爬虫实现、权限管理等,有助于读者更好地理解和应用相关技术。
Ai和python学习资料
文本摘要
冲击试验机sw22_三维3D设计图纸_包括零件图_机械3D图可修改打包下载_三维3D设计图纸_包括零件图_机械3D图可修改打包下载.zip
内容概要:本文详细介绍了MyBatis Plus(MP),它是MyBatis的增强工具,旨在简化CRUD操作、提高开发效率。其主要功能包括内置分页插件、简化CRUD操作以及代码生成器。使用时只需引入相应依赖,自定义Mapper接口继承BaseMapper泛型接口,并通过实体类反射获取数据库表信息。文章还介绍了常用注解如@TableName、@TableId、@TableField、@TableLogic和@Version,配置项如全局配置、类型别名和Mapper文件路径,以及核心功能如批量插入、分页查询、条件构造器(Wrapper)等。此外,扩展功能涵盖逻辑删除、枚举处理器和JSON处理器,插件功能则包括分页插件的配置和使用。 适合人群:具备一定Java开发经验,尤其是熟悉MyBatis框架的开发者,特别是那些希望提高开发效率、减少重复代码的工作1-3年研发人员。 使用场景及目标:①简化数据库操作,提高开发效率;②快速生成代码,减少手动编写SQL语句的工作量;③实现分页查询、逻辑删除、枚举和JSON字段处理等高级功能,提升应用的灵活性和可维护性。 其他说明:本文不仅提供了MyBatis Plus的功能介绍和使用方法,还深入探讨了条件构造器(Wrapper)的使用技巧,帮助开发者更好地理解和掌握这一强大的工具。在实际开发中,合理利用这些功能可以显著提高开发效率和代码质量。建议在学习过程中结合具体项目实践,逐步掌握各个功能的应用场景和最佳实践。
电子仿真教程,从基础到精通,每个压缩包15篇教程,每篇教程5000字以上。
这个是完整源码 SpringBoot + vue 实现 【java毕业设计】Springboot+Vue高考志愿填报系统 源码+sql脚本+论文 完整版 数据库是mysql 随着高考制度的不断完善和高等教育资源的日益丰富,高考志愿填报成为考生和家长关注的焦点。本文旨在开发一个基于Spring Boot后端框架、Vue.js前端框架和实现以下功能:考生信息管理、院校信息查询、专业信息查询、志愿填报、志愿评测等。通过Spring Boot框架构建后端服务,提供 API接口与前端进行交互;Vue.js框架用于构建前端用户界面,实现数据的动态展示和交互操作;MySQL数据库用于存储考生信息、院校信息、专业信息等数据。 在系统设计过程中,我们充分考MySQL数据库的高考志愿填报系统,提高志愿填报的效率和准确性,为考生和家长提供便捷的服务。 系统主要实现以下功能:考分考MySQL数据库的高考志愿填报系统,提高志愿填报的效率和准确性,为考生和家长提供便捷的服务生信息管理、院校信息查询、专业信息查询、志愿填报、志愿评测等。通过Spring Boot框架构建后端服务,提供 API接口与前端进行交互;Vue.js框架用于构建前端用户界面,实现数据的动态展示和交互操作;MySQL数据库用于存储考生信息、院校信息、专业信息等数据。 在系统设计过程中,我们充分考虑了系统的易用性、可扩展性和安全性。通过合理的数据库设计和优化,提高了系统的查询效率。同时,采用Spring Security等安全框架对系统进行安全防护,确保数据的安全性。 本文详细阐述了系统的需求分析、设计、实现和测试过程,并对关键技术和实现难点进行了深入探讨。通过实验验证,本系统能够满足高考志愿填报的基本需求,为考生和家长提供了高效、便捷的服务。此外,本文还对系统未来的发展方向和改进空间进行了展望,以期进一步完善系统功能,提高用户体验。