eclipse_rcp教程 下载本文

内容发布更新时间 : 2024/5/18 6:57:04星期一 下面是文章的全部内容请认真阅读。

简单RCP框架源码分析

关键字: RCP框架

在我们新建一个RCP应用程序框架时,eclipse会为我们自动生成若干个类:

网上也有很多关于“Hello RCP”的分析说明,但都聚集在类功能分析,没有源代码的分析。下面着重分析一下其中的某些不易理解的类以及其中涉及到的其它类的源代码。

1. Application类: 是RCP应用程序的入口点,你可以把它想象成程序的控制器,类似于Model2架构中的控制器。它很简短,而且在不同的项目中变化不大;它所做的就是创建 一个工作台Workbench,同时将其于一个

WorkbenchAdvisor联系起来。Workbench是RCP框架的一部分,一个RCP应用对应 一个Workbench,但一个 Workbench可以有多个Workbench窗口。 2. ApplicationWorkbenchAdvisor类:继承了WorkbenchAdvisor类,提供了两个方法,其中createWorkbenchWindowAdvisor方法将创建窗口的工作交给了ApplicationWorkbenchWindowAdvisor类。

3. WorkbenchAdvisor类: 该类不是一个接口,而是一个抽象类,它不包含任何的功能实现,因为将来很有可能在其中添加其它方法。Eclipse的设计者们希望每个RCP应用都实现 它,由平台来调用。Workbench和Workbench Window生命周期中的有一些重要事件,这些事件在

WorkbenchAdvisor中都 有相应的方法,Platform调用这些方法从而执行你的定制代码。 表1. WorkbenchAdvisor提供的事件处理方法

方法 initialize preStartup 描述 参数 第一个被调用,用来初始化,比如解析命令行,注册适配器,声明图像IWorkbenchConfigurer 等。 在初始化结束,但是在第一个窗口打 开前调用。可以被用来设置一些选项来影响初始打开的编辑器和视图。 在所有窗口已经被打开或恢复后,但是在事件循环开始前调用。它可以被 用来启动自动处理器,打开提示或其他窗口。 在事件循环结束后,但在任何窗口被关闭前调用。 postStartup preShutdown 在关闭Workbench过程中,所有窗口被关闭后调用。它可以被用来存储当postShutdown 前的应用状态和清理任何由initialize创建的东西。

表2. WorkbenchAdvisor提供的事件循环钩子

方法 eventLoopException eventLoopIdle

表3. WorkbenchAdvisor提供的信息获取方法,你可以在子类中覆盖

参数 描述 在事件循环中如果有未检测的异常则调用给方法。默认的实现将记录错误信息。 时间循环时什么也不做时调用 参数 Throwable Display 方法 getDefaultPageInput 描述 返回新的Workbench页面的缺省输入,缺 省值是null。 返回新创建的Workbench Window的初始getInitialWindowPerspectiveId 透视图。这个方法必须提供。 getMainPreferencePageId 返回第一个显示的首选参数页。缺省为 null意味着首选参数页按字母顺序排序。 上面的WorkbenchAdvisor事件对大多数应用来说是足够了,但是在某些情况,RCP又提供了两个方法来控制你的应用窗口和控件如何被创建。它们被列在表4,但是我觉得很多程序不需要用到这些。 表4. WorkbenchAdvisor提供的高级方法

参数 方法 openWindows 描述 在启动时打开所有Workbench Window。缺省实现会恢复前面存储的Workbench状态。

其它的方法在eclipse3.1后都被覆盖了。

4. ApplicationWorkbenchWindowAdvisor类:用来控制状态栏,工具栏,标题和窗口的大小等。但它将创建工具栏的任务交给了ApplicationActionBarAdvisor类。

5. WorkbenchWindowAdvisor类:查阅Javadoc文档可知,它是配置workbench窗口的公共基类。当窗口被创建时,该类就会被创建,用来配置窗口。用户应该继承该类并覆盖其中的某些方法来满足特定的需求。 表5. WorkbenchWindowAdvisor提供的生命事件点

参数 方法 preWindowOpen 描述 在Workbench Window的构造器中调用。可以使用这个方法来指定窗口是否有菜单栏。然而,窗口的widget还没有创建,因此在这个方法中不能引用它们。 postWindowRestore 当一个窗口从保存的状态恢复时,但在打开前,被调用。 postWindowCreate openIntro postWindowOpen 在窗口从保存状态恢复,或从scratch中创建后,但在打开前,被调用。 在窗口打开前一刻被调用,它用来创建introduction组件(如果有的话)。 紧接着Workbench Window被打开后调用。它被用来组装窗口的widget,例如设置 标题或修改它的大小。