`
Jesse_Dht
  • 浏览: 27333 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

RCP应用程序开发之四——应用程序窗体生成过程1

阅读更多

eclipse平台下,导入一个应用程序模板后,可以直接运行。这篇文章主要将窗体在生成的过程中有哪些重要的步骤总结了一下。

本篇文章分为那两个部分:

第一个部分为rcp应用程序生成窗体经历的几个步骤。

第二个部分描述窗上尚菜单、工具栏的生成。

1.1        rcp应用程序生成窗体经历的几个步骤:<o:p></o:p>

生成应用程序的窗体,主要经历了以下几个步骤:<o:p></o:p>

1、在application中:创建了工作台<o:p></o:p>

int returnCode = PlatformUI.createAndRunWorkbench(display, <o:p></o:p>

new ApplicationWorkbenchAdvisor());<o:p></o:p>

2、在ApplicationWorkbenchAdvisor中:配置应用程序的窗体<o:p></o:p>

public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(<o:p></o:p>

           IWorkbenchWindowConfigurer configurer) {<o:p></o:p>

       return new ApplicationWorkbenchWindowAdvisor(configurer);<o:p></o:p>

   }<o:p></o:p>

3、在ApplicationWorkbenchWindowAdvisor类中:配置菜单栏工具栏<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>

4、在WorkbenchActionBuilder类中:返回不同工作台窗体的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>

那么eclipse是怎样来帮助我们生成一个主窗体的呢?在这个过程中又经历了哪些过程?现在详细的学习这个过程。<o:p></o:p>

1PlatformUI的方法createAndRunWorkbench(),这个方法用来创建工作台。<o:p></o:p>

在(1)中,调用的是PlatformUI的这个方法:<o:p></o:p>

public static int createAndRunWorkbench(Display display,<o:p></o:p>

            WorkbenchAdvisor advisor) {<o:p></o:p>

        return Workbench.createAndRunWorkbench(display, advisor);<o:p></o:p>

    }<o:p></o:p>

通过createAndRunWorkbench来创建工作台窗体,在这个方法中,调用了Workbench了的createAndRunWorkbench这个方法。<o:p></o:p>

(2) WorkbenchcreateAndRunWorkbench()方法<o:p></o:p>

public static final int createAndRunWorkbench(Display display,<o:p></o:p>

           WorkbenchAdvisor advisor) {<o:p></o:p>

       // create the workbench instance<o:p></o:p>

       Workbench workbench = new Workbench(display, advisor);<o:p></o:p>

       // run the workbench event loop<o:p></o:p>

       int returnCode = workbench.runUI();<o:p></o:p>

       return returnCode;<o:p></o:p>

   }<o:p></o:p>

在这个方法中,创建了一个工作台的实例,并把adivsor作为参数传入。然后运行一个Workbench中的一个runUI方法,主要通过这个方法创建了工作台的窗体。我们看看这个方法都实现了什么。<o:p></o:p>

3WorkbenchrunUI()方法<o:p></o:p>

我们看下面这行代码,int returnCode = workbench.runUI();<o:p></o:p>

runUI()的功能就是:用来运行workbench UI(工作台窗体),直到工作台(workbench)关闭和重新启动,它用来承担处理和分派事件。(Internal method for running the workbench UI. This entails processing and dispatching events until the workbench is closed or restarted.<o:p></o:p>

当正常退出时,返回RETURN_OK,当工作台通过一个针对IWorkbench.restart的访问终止时,返回RETURN_RESTART 当工作台不能被启动时返回RETURN_UNSTARTABLE。其他值留为后用。 <o:p></o:p>

在这个runUI()方法中,我们看到一个比较重要的方法:<o:p></o:p>

4runUI()方法中的init(display)方法<o:p></o:p>

boolean initOK = init(display);这个方法属于Workbench的内部方法,用来初始化工作台,重建或打开一个窗体。如果init成功,返回initOK。在这个方法中,创建了针对窗体的管理WindowManager,命令的管理CommandManager,上下文的管理ContextManager.<o:p></o:p>

另外在这个方法中还初始化了图像,颜色等。<o:p></o:p>

initializeImages();<o:p></o:p>

initializeFonts();<o:p></o:p>

initializeColors();<o:p></o:p>

initializeApplicationColors();<o:p></o:p>

{通过这些方法,可以学习eclipse是怎么初始化ImageFontColor等这些比较耗费资源的例子,针对这方面的学习,以后再续。}<o:p></o:p>

init中,还有个比较重要的方法:通过advisor引用internalBasicInitialize方法:<o:p></o:p>

advisor.internalBasicInitialize(getWorkbenchConfigurer());<o:p></o:p>

我们首先看看它的参数:一个WorkbenchConfiguer对象,getWorkbenchConfigurer()方法在WorkbenchConfiguer类中定义,它返回一个单例WorkbenchConfiguer对象。这个对象用来配置工作台。<o:p></o:p>

public final void internalBasicInitialize(IWorkbenchConfigurer configurer) {<o:p></o:p>

        if (workbenchConfigurer != null) {<o:p></o:p>

            throw new IllegalStateException();<o:p></o:p>

        }<o:p></o:p>

        this.workbenchConfigurer = configurer;<o:p></o:p>

        initialize(configurer);<o:p></o:p>

    }<o:p></o:p>

internalBasicInitializeconfigure对象引用传递给WorkbenchAdvisor对象的workbenchConfigurer属性,并调用了WorkbenchAdvisor类的initialize方法。这个很重要。我们在有关工作台(Workbench)生命周期的文章中提到:initialize方法是在任何窗体打开前调用这个方法。可以用来初始化。我们可以在WorkbenchAdvisor的子类中来实现这个方法。<o:p></o:p>

我们来看看这个方法的官方译文:<o:p></o:p>

在工作台启动之前,执行任意的初始化内容。<o:p></o:p>

在任何窗体被打开之前,工作台初始化时,这个方法会被优先的访问。用户不能直接访问这个方法,,缺省的没有任何的实现。子类可以继承这个方法。用户会用configuer来配置工作台,如果需要用,则用户需要获得通过getWorkbenchConfigurer来获得configurer<o:p></o:p>

[Performs arbitrary initialization before the workbench starts running. <o:p></o:p>

This method is called during workbench initialization prior to any windows being opened. Clients must not call this method directly (although super calls are okay). The default implementation does nothing. Subclasses may override. Typical clients will use the configurer passed in to tweak the workbench. If further tweaking is required in the future, the configurer may be obtained using getWorkbenchConfigurer. ]<o:p></o:p>

5preStartup()方法<o:p></o:p>

init()这个方法中,还调用了:<o:p></o:p>

advisor.preStartup();<o:p></o:p>

具体的可以参考:前面讲到WorkbenchAdvisor的生命周期中的preStartup方法,它的调用是在第一个窗口打开之前。在启动或者恢复期间暂时禁用某些项时,该方法非常有用。<o:p></o:p>

这个方法在第一个工作台窗体被打开或恢复(重建)时,执行任意的操作。<o:p></o:p>

这个的实在workbench被初始化的之后被访问的,用户不能直接访问这个方法,必须通过子类继承。<o:p></o:p>

[Performs arbitrary actions just before the first workbench window is opened (or restored). <o:p></o:p>

This method is called after the workbench has been initialized and just before the first window is about to be opened. Clients must not call this method directly (although super calls are okay). The default implementation does nothing. Subclasses may override.] <o:p></o:p>

然后再执行下面这个if语句:<o:p></o:p>

if (!advisor.openWindows()) {<o:p></o:p>

               return false;<o:p></o:p>

           }<o:p></o:p>

6WorkbenchAdvisoropenWindows()方法<o:p></o:p>

分享到:
评论

相关推荐

    Eclipse权威开发指南2.pdf

    10.1 在RCP上构建应用程序的 理由...... 235 10.1.1 给企业带来的好处..... 235 10.1.2 给软件开发者带来的 好处..... 236 10.1.3 给用户带来的好处..... 236 10.2 复习Eclipse体系结构...... 237 10.2.1 Eclipse...

    Eclipse权威开发指南1.pdf

    10.1 在RCP上构建应用程序的 理由...... 235 10.1.1 给企业带来的好处..... 235 10.1.2 给软件开发者带来的 好处..... 236 10.1.3 给用户带来的好处..... 236 10.2 复习Eclipse体系结构...... 237 ...

    Eclipse权威开发指南3.pdf

    10.1 在RCP上构建应用程序的 理由...... 235 10.1.1 给企业带来的好处..... 235 10.1.2 给软件开发者带来的 好处..... 236 10.1.3 给用户带来的好处..... 236 10.2 复习Eclipse体系结构...... 237 ...

    清华大学DeepSeek从入门到精通(视频课程+PDF)

    【清华大学】DeepSeek从入门到精通(视频课程+PDF)

    更新-“双高计划”专业群完整申报书与建设方案/中期评估报告

    自2019年以来,教育部启动实施“双高计划”,遴选确定首批“双高计划”建设单位197所,其中高水平学校建设单位56所,高水平专业群建设单位141所,河南省有黄河水利职业技术学院、河南工业职业技术学院等6所职业学校入选。2022年,教育部开展国家“双高计划”中期绩效评价,从评价结果看,国家“双高计划”任务进展顺利,建设成效突出,形成了一批先进经验做法和典型案例,在引领职业教育改革、服务国家战略和支撑区域发展方面形成示范势头。 今天,我们给大家分享一些“双高计划”专业群完整申报书与建设方案和中期评估报告。 ## 一、专业群完整申报书与建设方案 ## 二、“双高计划”中期报告 (100多份)

    电子商务平台秒杀系统减库存设计的核心逻辑与优化策略解析

    内容概要:本文详细探讨了电商平台上秒杀系统中减库存的设计逻辑和技术优化方法。首先,文中阐述了‘下单减库存’、‘付款减库存’和‘预扣库存’三种常见方式及其各自面临的问题和局限性,尤其是面对高并发流量冲击下的系统稳定性与数据准确性保障挑战。接着讨论了适用于大规模促销活动中快速而精准地扣除存货的方法,提出了诸如应用本地缓存(Local Cache)、引入高性能持久化键值存储(如Redis),甚至修改数据库引擎源代码(InnoDB 层面排队机制)等一系列先进解决方案来确保交易流程顺畅。此外,还提到了在极端情况发生(例如超卖)时如何借助补救措施挽回损失的具体实例。 适合人群:电商平台开发运维技术人员;有兴趣深入了解电商业务架构和技术优化的开发者和IT管理人员。 使用场景及目标:①帮助设计师理解不同减库存策略的应用时机及其利弊;②指导程序员针对特定业务需求选择最适合的技术路径进行项目构建;③提供给运维专家关于改善在线交易平台响应速度和服务质量的专业见解。 其他说明:本篇文章对于构建高效的电子商贸系统有着极高的参考价值,尤其是那些准备应对瞬息万变市场环境下的企业来说尤为重要。它不仅限于理论探讨层面,

    动态表单,VUE动态表单 基于vue+elementplus实现动态表单组件,通过拖拽组件到面板即可实现一个表单 支持各个组件的动态隐藏显示,动态表格弹窗式维护

    动态表单,VUE动态表单。基于vue+elementplus实现动态表单组件,通过拖拽组件到面板即可实现一个表单。支持各个组件的动态隐藏显示,动态表格弹窗式维护。

    【毕业设计】java-springboot-vue家居日用小百货交易网站实现源码(完整前后端+mysql+说明文档+LunW).zip

    【毕业设计】java-springboot-vue家居日用小百货交易网站实现源码(完整前后端+mysql+说明文档+LunW).zip

    【毕业设计】java-springboot+vue火锅店管理系统源码(完整前后端+mysql+说明文档+LunW).zip

    【毕业设计】java-springboot+vue火锅店管理系统源码(完整前后端+mysql+说明文档+LunW).zip

    基于springboot+vue的在线教育系统设计与实现(LW+PPT).zip

    随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了微服务在线教育系统的开发全过程。通过分析微服务在线教育系统管理的不足,创建了一个计算机管理微服务在线教育系统的方案。文章介绍了微服务在线教育系统的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。 本微服务在线教育系统有管理员,用户两个角色。管理员功能有个人中心,用户管理,课程信息管理,课程类型管理,学科管理,购买的课程管理,职业规划管理,视频点播管理,我的笔记管理,我的课程管理,消息通知管理,学习交流,试卷管理,留言板管理,试题管理,系统管理,考试管理。用户功能有个人中心,用户管理,购买的课程管理,我的笔记管理,我的课程管理,消息通知管理。因而具有一定的实用性。 本站是一个B/S模式系统,采用SSM框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得微服务在线教育系统管理工作系统化、规范化。本系统的使用使管理人员从繁重的工作中解脱出来,实现无纸化办公,能够有效的提高微服务在线教育系统管理效率。 关键词:微服务在线教育系统;SSM框架;MYSQL数据库;Spring Boot

    基于Javascript实现,强化学习QLearning的一个贪吃蛇实例

    javascript 基于Javascript实现,强化学习QLearning的一个贪吃蛇实例.

    编程挑战_Chef卡牌游戏_学习资源_技能提升_1741399339.zip

    python教程学习

    基于springboot+vueIT技术交流和分享平台的设计与实现(LW).zip

    我国科学技术的不断发展,计算机的应用日渐成熟,其强大的功能给人们留下深刻的印象,它已经应用到了人类社会的各个层次的领域,发挥着重要的不可替换的作用。信息管理作为计算机应用的一部分,使用计算机进行管理,具有非常明显的优点,利用网络的优势特开发了本基于Spring Boot的IT技术交流和分享平台。 本IT技术交流和分享平台是基于Spring Boot框架,采用Java技术,MYSQL数据库进行开发的。系统具有灵活的一体化设计方式,圆满完成了整个系统的界面设计。本系统实现了用户功能模块和管理员功能模块两大部分,通过该系统用户可以快速进行IT技术交流和分享,管理员可登录系统后台对系统进行全面管理,确保系统正常稳定的运行。系统功能齐全,符合用户IT技术交流和分享的需求。 本文主要首先介绍了课题背景、设计原则和研究内容,系统采用的相关技术及开发平台,接着对本基于Spring Boot的IT技术交流和分享平台进行系统需求分析和设计,包括系统的功能模块,数据库的设计,系统结构以及系统界面设计等,最后对进行系统测试,完成本篇论文。 关键词:IT技术交流, Spring Boot框架, Java技术,MYSQL数据库

    疲劳检测yawn图片数据集

    疲劳检测yawn图片数据集

    JDK7通过java-jwt验证

    JDK7通过java-jwt验证

    【毕业设计】java-springboot+vue会议管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip

    【毕业设计】java-springboot+vue会议管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip

    sksalahuddin2828_Python_1741398999.zip

    python学习资源

    51CTO 1、技术解析篇-DeepSeek入门宝典 2、开发实战篇-DeepSeek入门宝典 3、行业应用篇-DeepSeek入门宝典 4、个人使用篇-DeepSeek入门宝典

    51CTO 1、技术解析篇-DeepSeek入门宝典 2、开发实战篇-DeepSeek入门宝典 3、行业应用篇-DeepSeek入门宝典 4、个人使用篇-DeepSeek入门宝典

    机器学习与模式识别领域的PRML习题解析手册

    内容概要:本文档是由高正奇编辑的针对模式识别和机器学习(PRML)教科书的一份详细的解答手册。文档覆盖了从基本概念如误差函数求导、贝叶斯定理应用到多元高斯分布计算、Gamma函数积分及其性质等一系列复杂问题的解决方案,以及涉及线性模型分类的基础练习题、条件概率和联合概率计算等入门级习题。每一题都经过细致推导,帮助学生加深对机器学习相关概念的理解并掌握具体的数学方法。 适合人群:主要适用于正在攻读机器学习、模式识别相关课程的学生,以及从事数据科学工作的专业人士作为深入理解和实践指南。 使用场景及目标:本手册旨在辅助教学过程中遇到的具体难题解析,在研究和实践中作为参考资料进行理论验证和技术难点突破,尤其有助于准备考试或者项目实施时需要巩固知识的应用场合。 其他说明:书中题目涵盖广泛,既有直观的概率论应用,也有复杂的积分变换技巧和最优化思路展示,对于希望提高自身计算能力和解决实际问题能力的学习者非常有价值。但要注意的是,部分内容较为深奥,可能不适合初学者自学使用,最好配合课堂讲解或其他教材一起学习效果更佳。

    编程语言_Python_入门之旅_教程_1741403040.zip

    python学习资源

Global site tag (gtag.js) - Google Analytics