首先我们来创建一个基于GEF的浏览器(而不是编辑器),也就是说,它只能浏览一个模型,而不能够进行编辑。先关注于浏览而不是编辑,有助于理解GEF的一些核心的概念。
GraphicalViewer和createControl()方法
在开始之前,最先要弄明白的是,一个GEF的图如何能够显示在由ViewPart在createPartControl(Component parent)中提供的这个parent控件上。这是通过GEF的GraphicalViewer(准确的说应该是EditPartViewer,GraphicalViewer是EditPartViewer的子接口,EditPartViewer的名字可能更容易理解一些:是为EditPart创建一个Viewer进行显示)来进行的。GraphicalViewer可以将其自身适配到任何一个SWT Control上。它的createControl()方法接受一个SWT Control来作为适配的对象,将GEF所生成的Figure显示在这个SWT Control之上。(在内部实现上,GraphicalViewer使用Draw2D的LightweightSystem来做这个事情,将Draw2d的Figure对象绘制在SWT的Control上)
在弄明白了这一点之后,我们就会知道,实际上是将GEF放在ViewPart中还是放在EditorPart对于GEF而言是没有本质的区别的,甚至将GEF放在任何的SWT Composite上都是可以的。不过GEF框架中提供了对创建EditorPart的缺省实现。而如果要在Editor之外使用GEF的话,需要额外的对GraphicalViewer做一些设置。
下面的这个图,给出了GEF中的几个主要关系,下面会有对这个图的解释。
setContent()
GraphicalViewer的思想,类似于JFace中所实现的Viewer思想:要显示一个控件,需要输入的是一个模型对象,要显示的内容根据输入的模型对象来进行的。因此,GraphicalViewer同所有JFace Viewer一样有一个方法,叫做setContent(Object o)来接受一个模型对象,而对这个模型对象如何进行处理并显示,就是GEF的工作了。
在创建一个GraphicalViewer之后,要使GEF能够运转起来,还需要做如下几件事情:
1. 设置一个RootEditPart:RootEditPart的是使整个GEF框架运行起来的关键之一。RootEditPart并不对应于任何的模型对象,它将从setContents()方法中接收到的模型对象进行转换,并添加到整个的EditPart体系中去,具体的添加过程后面会有详细讨论。
2. 设置其EditPartFactory:负责从模型到EditPart的转换。一般来说一个模型对象对应于一个EditPart。这个类的
3. 设置EditDomain:用来接收事件并选择恰当的事件处理函数进行处理,因为我们尚不需要进行编辑,因此这一个可以暂时略过。
4. 调用setContents()方法:为其设置要显示的内容。
由GraphicalViewer所显示的内容,肯定是一个Draw2d中的IFigure对象。而如何从一个模型对象到一个Figure对象呢?这中间的联系就是通过EditPart来完成的。GEF使用的是MVC模式,Model部分可以使任意的模型对象;View部分就是Draw2d的IFigure对象,联系Model和View的Controller,在GEF中称为EditPart。简单的说,GEF中的EditPart,负责将模型转换为IFigure的显示,它从模型中读取信息,生成Figure;另一方面,EditPart负责从View接收事件,并将这些事件转化为对模型的修改。在这一部分中,我们暂时只关注于第一个方面:EditPart是如何将一个模型转换为Figure以进行显示的。
- 大小: 112.9 KB
分享到:
相关推荐
### GEF教程精要 #### 引言:GEF框架概览 GEF,全称为Graphical Editor Framework...GEF框架的学习之路虽漫长,但其带来的回报无疑是巨大的,无论是对个人技能的提升,还是对项目成果的贡献,都有着不可估量的价值。
- **《Eclipse Plug-ins》第三版**:该书由 Dan Rubel 和 Eric Clayberg 合著,被广泛认为是学习 Eclipse 扩展的最佳资源之一。书中不仅介绍了 Eclipse 的内部结构,更重要的是提供了大量关于如何构建高质量插件的...
GEF是一个用于构建图形编辑器的开源Java框架,广泛应用于创建可视化的软件设计工具。在这个场景中,可能是讨论如何在GEF环境中实现图形元素的动态行为或者交互。 在描述中提到了一个博客链接,虽然内容没有给出,但...
- **框架结构**:GEF框架主要由多个模块组成,包括模型层(Model)、视图层(View)、控制层(Controller)等。这种分层设计有助于开发者更好地理解和使用该框架。 - **特点**: - **命令模式(Command Pattern)**:GEF...
而Editor则是RCP中最常用的组件之一,它不仅能够编辑文本,还能展示和编辑图形数据,GEF正是利用了Editor的这些特性,实现了图形数据的可视化编辑。 #### GEF的基本结构 GEF的核心架构由模型(Model)、控制器...
**GEF(Graphics Editing Framework)** 是一个更为高级的框架,它建立在Draw2D之上,用于构建图形编辑器。GEF提供了一套完整的机制来处理图形编辑器的各个方面,如模型-视图-控制器(MVC)架构、图元工厂、连接线...
首先,文档《Eclipse的Adapter机制.doc》讲述了Eclipse的核心设计模式之一——适配器(Adapter)机制。适配器模式是软件设计模式中的一个重要概念,它允许不兼容的对象之间进行通信。在Eclipse中,这一机制使得各种...
- **JDT的抽象语法树(AST)**:是实现正向工程和逆向工程的关键技术之一,能够方便地将类图模型与Java代码相互转换。 - **MVC设计模式**:在GEF中的运用提高了插件的可扩展性和可维护性。 - **命令模式和工厂模式**...
在进行Android开发时,使用Eclipse作为集成开发环境(IDE)是非常常见的选择之一。但是,在配置过程中可能会遇到各种各样的问题,特别是当安装ADT(Android Development Tools)插件时出现问题,如文中所提到的...
GMF,全称是Graphical Modeling Framework,是Eclipse建模项目中的一个重要组成部分,它建立在GEF(Graphical Editor Framework)和EMF(Eclipse Modeling Framework)之上,为开发基于图形界面的编辑器提供了一种更...
因此,采用先进的知识管理技术来整合各种知识资源,提高信息利用效率,成为解决水资源管理问题的重要途径之一。 #### 三、框架构建 **1. 框架概述** 构建的基于工作流的水资源知识管理框架主要关注如何将知识管理...
ArgoUML是一款基于Java语言开发的开源统一建模语言(UML)工具,它提供了全面的UML建模功能,被广泛认为是业界最受欢迎的UML建模平台之一。这款软件不仅允许用户创建和编辑各种UML图表,还支持模型的导出、导入以及...
Eclipse的扩展性是其核心优势之一,主要通过以下机制实现: - **Plugin(插件)**:Eclipse的基本功能单位,UI和功能部分应分离至不同插件。 - **Extension Point(扩展点)**:定义可被其他插件扩展的功能点。 - *...
实时智能监测是物联网技术应用的重要场景之一,它利用传感器、数据采集器、通信网络等技术手段,实现对环境、设备等监测对象的实时数据采集、传输、分析和处理,并通过智能设备实现监测数据的实时反馈和预警。...
2. **Java开发工具(JDT)**:Eclipse的核心组件之一,提供了全面的Java语言支持,包括代码编辑、编译、调试和重构功能。 3. **插件系统**:Eclipse基于插件架构,允许开发者通过安装额外的插件扩展其功能,如Git、...
为了提高开发效率,IDE需要完成一系列的工作,包括但不限于需求分析、概要设计、详细设计、人机交互设计、编码、测试、文档编写、编译/集成、部署等。这些开发过程需要依据具体项目和使用者的需求来定制,因为不同的...
2. GEF (Graphical Editor Framework): 为Eclipse提供了图形编辑的基础框架,用于创建各种图形界面工具。 3. UML2: 提供UML建模支持,帮助开发者进行系统设计。 4. VE (Visual Editor): 是一个基于Eclipse的可视化...
2. **EMF (Eclipse Modeling Framework)** 和 **GEF (Graphical Editor Framework)**:这两个是Eclipse的模型和图形编辑框架,主要用于创建和编辑模型驱动的应用。EMF提供了一种方式来表示和操作数据模型,而GEF则...