rcp(插件开发)深入浅出Eclipse RCP(2):RCP简介 转载

2024-01-24 03:32

本文主要是介绍rcp(插件开发)深入浅出Eclipse RCP(2):RCP简介 转载,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文链接:http://www.cnblogs.com/kirinboy/archive/2009/06/16/HeadFirstEclipseRcp2.html

 

我们用Hello RCP模板创建了一个简单的RCP应用,并介绍了系统自动生成的5个类 。本文将重点介绍RCP的架构并对其中的一些概念进行阐述。

Eclipse体系结构

Eclipse的体系结构图如下。

Platform Runtime是整个架构的核心,其他部分实质上都属于插件范畴。Eclipse采用动态加载机制,即只有需要的才加载,这样可以降低启动时间,提高资源使用效率。

Workspace主要负责管理用户资源,如创建项目的管理、文件变更等,并通知其他插件关于资源的变更信息。

Workbench是Eclipse提供的用户界面,它使用SWT(标准窗口工具包)和JFace(建立在SWT之上的UI部件)构建。

Help允许以HTML文件形式添加文档,并提供了一个附加的导航结构以便用户使用帮助功能搜索相关信息。

Team负责提供版本控制和配置管理支持。它根据需要添加视图,以允许用户与所有使用的任何版本控制系统交互。大多数插件都不需要与Team交互,除非它们提供版本控制服务。

JDT提供了用于编辑、查看、编译、调试和运行Java代码的专门插件。PDE构建于Eclipse平台和JDT之上,提供了专门开发插件的工具。

什么是RCP

RCP摆脱了失败的AWT和Swing,是一套基于SWT和JFace的图形界面引擎。RCP在本质上是Eclipse插件,它提供丰富的界面控件,使得基于 Java 开发桌面应用也变得容易了很多。

概念解析

上一篇随笔中提到了很多RCP概念,如Workbench、WorkbenchWindow、Advisor等,它们具体是干什么的呢?下面我将试着对这些概念进行解释。

Display

应用程序一般只需要一个Display对象,该对象实际上是一个SWT对象,代表了底层图形系统的实现。Display的主要任务是事件处理,它负责从操作系统的事件队列中读取事件,传递给RCP的事件监听器以便完成具体的任务。需要注意的是,Display对象不代表应用程序窗口的任何可视控件,在应用程序主窗口打开之前,Display是不可获得的。应用程序主窗口打开之后,才可以通过一个被称作Shell的对象获得。Display对象的获得方法如下。

Display display = new Display();

或者:Display display=Display.getCurrent();

Shell

每一个窗口都有一个Shell对象。Shell对象代表了与用户交互的窗口框架,并处理与窗口关联的诸如移动、改变大小等常见行为。Shell对象的获得方法:

Display display=Display.getCurrent();

Shell shell = new Shell(display);

或者:Shell shell=Display.getCurrent().getActiveShell();

Workbench

Workbench是工作台,通俗地说就是代表用户界面的UI元素。工作台上有各种窗口、图标、按钮和控件,用户可以在工作台上做各种操作。获得工作台对象的方法:

IWorkbench wb=PlatformUI.getWorkbench();

工作台对象有两个方法也许很有用:

wb.restart(),关闭应用程序并立即重新启动。

wb.close(),正常关闭应用程序,等同于ActionFactory.QUIT_ACTION。

Advisor

Advisor是建议者,用户主界面宽度、高度、图标、菜单、工具栏、颜色、操作等等配置方案需要Advisor来提出“建议”。Eclipse提供了3种类型的Advisor:

1. WorkbenchAdvisor。应用程序级别,Eclipse3.0开始引入的全新类。每一个应用程序只有一个 Workbench,WorkbenchAdvisor负责该工作台生命周期的管理,例如启动、关闭工作。WorkbenchAdvisor也负责该 Workbench的异常处理,并负责向Workbench提供一些重要参数,例如可以指定该Workbench的初始透视图。

2. WorkbenchWindowAdvisor。窗口级别。每一个窗口都有一个WorkbenchWindow- Advisor 实例。WorkbenchWindowAdvisor 负责具体窗口生命周期的管理,例如状态栏、工具栏、菜单、窗口标题、窗口大小和各种控件等等,也可以处理窗口的各种事件例程。

3. ActionBarAdvisor。窗口级别。每一个窗口都有一个ActionBarAdvisor实例。ActionBarAdvisor负责管理窗口的菜单栏、状态栏、工具栏的外观和行为。

IWorkbenchSite

workbench及其part,包括part中的page,的通用接口。

IWorkbenchPartSite:workbench和workbench part之间主要的接口,不直接实现。

PartSite:实现IWorkbenchPartSite。PartSite的生命周期:

1. 构建site。

2. 构建part并保存在part中??

3. site调用part.init()。

4. 构建pane并保存在site中。

5. 构建part的action bar并保存在site中。

6. pane添加到presentation中。

7. 创建pane和part的SWT widget。

8. 激活site,使actions可见。

IWorkbench

Workbench是Eclipse用户界面中最底层的对象,它建立在Display之上,包含1个或多个IWorkbenchWindow,用于向最终用户呈现信息。当你的workbench插件被激活的时候,eclipse平台将为之创建一个实例,在平台的整个生命周期中,只允许出现该workbench的唯一实例

IWorkbenchWindow

上面getActiveWorkbenchWindow()得到的就是IWorkbenchWindow。IWorkbench利用其包含的IWorkbenchWindow向终端用户展现信息。workbench window是workbench中最顶级的window。包括菜单栏、工具栏、状态栏以及一个用来显示IWorkbenchPage的主区域。每个IWorkbenchWindow包含0个或多个IWorkbenchPage,但是同一时刻只允许一个IWorkbenchPage被激活并向最终用户显示。

IWorkbenchPage

IWorkbenchPage的功能就是组织一个或多个IWorkbenchPart(IEditorPart或IViewPart)显示在一个IWorkbenchWindow中,最终呈现给最终用户。IWorkbenchPage包含0个或多个IEditorPart或IViewPart,这些IEditorPart和IViewPart完全被包含在这个IWorkbenchPage并且不能与其它的IWorkbenchPage共享。IWorkbenchPage上定义的Layout和ActionSet就是我们常说的透视图——perspective了。

WorkbenchPage:workbench中view和editor的集合。

IWorkbenchPage.findView(viewName)可以得到IViewPart。

IWorkbenchPage.findEditor(IEditorInput)可以得到IEditorPart。

获取WorkbenchPage的方法:

ViewPart.getViewSite().getPage()。(getViewSite()得到的是IWorkbenchPartSite)

getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage()。

PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()。

IWorkbenchPart

WorkbenchPart是所有workbench parts的基类,如ViewPart和EditPart。不直接继承。

IWorkbenchPart就是上面提到的IEditorPart和IViewPart,它也只包含这两个子类型。

IViewPart常常被用于导航信息的层次结构,例如我们的workspace,或者用来打开一个编辑器,或者用来显示这个编辑器的某些属性

IEditorPart多被用来编辑或浏览一个文档或一个输入的对象,而这个输入的对象必须是一个IEditorInput,IEditorPart遵循的就是打开-保存-关闭的生命周期模型

IWorkbenchPart的生命周期模型:

创建IWorkbenchPart扩展点

实例化IWorkbenchPart

创建一个IWorkbenchPartSite

调用part.init(site)

IWorkbenchPart成为可见:

调用part.createControl(parent)绘制 IWorkbenchPart

激活partOpened event

IWorkbenchPart被激活或者取得焦点:

调用part.setFocus()

激活partActivated event

IWorkbenchPart被关闭:

如需要保存,完成保存

解除IWorkbenchPart的激活状态

激活partClosed event

从界面上移除IWorkbenchPart

调用part.dispose()

PartPane:ViewPane和EditorPane的基类。

PartSite:ViewSite和EditorSite的基类,实现IWorkbenchPartSite。

IEditorInput:是editor input轻量级的描述符(descriptor),类似文件名,但更加抽象。它并不是一个model,而是为IEditorPart的model源的描述。

小结

本文介绍了一些RCP的基本概念,在接下来的随笔中将通过实例讲解如何进行RCP开发。

这篇关于rcp(插件开发)深入浅出Eclipse RCP(2):RCP简介 转载的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/638423

相关文章

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并

基于Python开发PDF转PNG的可视化工具

《基于Python开发PDF转PNG的可视化工具》在数字文档处理领域,PDF到图像格式的转换是常见需求,本文介绍如何利用Python的PyMuPDF库和Tkinter框架开发一个带图形界面的PDF转P... 目录一、引言二、功能特性三、技术架构1. 技术栈组成2. 系统架构javascript设计3.效果图

基于Python开发PDF转Doc格式小程序

《基于Python开发PDF转Doc格式小程序》这篇文章主要为大家详细介绍了如何基于Python开发PDF转Doc格式小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用python实现PDF转Doc格式小程序以下是一个使用Python实现PDF转DOC格式的GUI程序,采用T

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安