`
rason2008
  • 浏览: 1945 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

基于Eclipse GEF关键技术的分析与研究

阅读更多
2.Draw2D技术

轻量级框架:轻量级框架[LightweightSystem类]把SWT和Draw2D 连接起来,它把鼠标事件和画图事件从SWT 转发给Draw2D的图形上。它是Draw2D的核心类。

LightweightSystem 主要包含三个组成部件:

1.根图形[The root figure]: 根图形是RootFigure类的实例,应用程序的根图形必须建立在它之上。它继承了一些SWT Canvas的图形环境,如颜色,字体等。

2.事件转发器[The event dispatcher]: 事件转发器把SWT事件转换成相应Draw2D事件。它可以跟踪那个图形被聚焦,那个图形是被鼠标点击的目标图形。它还控制tooltip的激活。它为想捕捉鼠标的图形提供支持。

3.更新管理器[The update manager]:更新管理器是负责画和更新Draw2D图形。当一个画的请求被事件转发器从SWT canvas发送到LightweightSystem上时,LightweightSystem调用更新管理器performUpdate()方法。一般管理器维持着一个List列表,该列表包含无效的或需要重画的图形。

图形:[Figure类]是所有在Draw2D用户界面中看到的都是图形。它在一个重量级的窗口中模拟一个重量级图形系统。在不消耗太多系统资源情况下,他们允许你创建一个复杂的图形展示。图形都应该建立在根图形之上。
图形的生命周期中,主要的过程是绘制和验证。

绘制:Draw2D要求图形负责自己的绘制,通过调用paint()完成,其绘制过程是:

1.paintfigure() 图形绘制本身
2.paintclientarea() 绘制该图形的子图形
3.paintborder() 绘制该图形的修饰边框

验证:当图形的大小或位置需要被计算时(如图形的位置发生变化时),Draw2D将使用验证。

1.validate( ) 要求图形的布局管理器重新布局它的子图形。
2.revalidate( ) 首先调用invalidate( )方法(该方法会使该图形及其父链上的图形无效),其次,添加该图形及其父链到更新管理器的无效List上。

3.MVC

GEF的优势是提供了标准的MVC(Model-View-Control)结构。与其他的一些MVC框架相比,GEF的一个主要设计目标是尽量减少模型和视图之间的依赖,好处是可以根据需要选择任意模型和视图的组合,而不必受开发框架的限制。

GEF中MVC框架的实现:

1.控制器[EditParts]:控制器是GEF中的核心元素,相当于MVC框架中的Controler,它们具体控制着模型元素到图形的映射,即把模型与相应得图形对应起来,并实现模型与图形的相互作用。一般应该为每个模型元素创建对应的控制器,因此它们将有和模型元素相对应的类层次结构。

程序员可以继承三种EditPart,分别是
org.eclipse.gef.editparts.AbstractGraphicalEditPart
org.eclipse.gef.editparts.AbstractConnectionEditPart
org.eclipse.gef.editparts.AbstractTreeEditPart

前两个是为了在编辑器[EditorPart]中用到,分别表示图形和图形之间的连线用。最后一个是在大纲[Outline]中用到。

下面我们将关注一下控制器的生命周期:

控制器是在编辑器中通过工厂类创建的,该工厂根据不同的模型元素创建相应的控制器。控制器创建后并不是立刻可见或处在激活状态。当GEF框架得知控制器需要被激活时,控制器将处在激活的状态。如果某个控制器不被需要时(如编辑器被关掉或用户删除控制器对应的模型),控制器将处在不激活的状态。两个方法EditPart#activate和EditPart#deactivate分别对应上述过程。还有一个方法EditPart#isActive,将总是返回控制器的当前状态。

2.模型[Model]:模型保存着业务逻辑,是GEF这中唯一可以持久化的部分。为了能让控制器知道模型的变化,应该把控制器作为事件监听者注册在模型中,当模型发生变化时,就出发相应的事件给控制器,后者负责通知各个视图更新。

3.视图[Figure]:GEF提供了在EclipseWorkbench中使用Viewer,称为EditPartViewer。它的作用和 jface中的 Viewer很相,不过这时候它的ContentProvider和LabelProvider是EditPart,通过setContents设置模型 对象的根。EditPartViewer可以适配到任何一个SWT控件,因为它要求有createControl方法,接受一个父SWT控件作为适配对 象,从而将 GEF生成的Figure对象显示在这个SWT控件上,因此GEF可以使用任何图形包,不过GEF提供了对Draw2D的默认实现。

4.编辑器[EditorPart]:在这里不得不介绍一下编辑器,因为一般都是由编辑器来组装GEF的MVC。GEF的编辑器类是Eclipse编辑器的一个子类。在介绍编辑器之前先介绍几个GEF中的概念:

编辑域[EditDomain] :编辑域是一个起到管理作用的类,它绑定了一个编辑器、若干个查看器和若干个工具。因此它定义了真实的编辑器。编辑域还提供一个命令堆栈,用来保存所有执行过的命令,有两点好处:1.可实现重做和不做的操作2.可查看模型是否被改动。
工具[Tool] :状态对象,根据当前的状态和它所接受的事件来产生相应的请求并传递给控制器。

调色板[palette] :调色板是位于编辑器中的一个特定的查看器[Viewer],工具放在它上面。
编辑器主要实现以下功能 :

1.需要创建EditDomain。
2.通过EditDomain,访问命令堆栈,为编辑器提供参考[如参考命令堆栈,编辑器决定是否允许存储操作]。
3.实现存储功能。
4.装配图形查看器[GraphicalViewer]。
5.装配调色板[palette]。
6.实现大纲[Outline]的挂接等等。

总结:编辑器利用工厂[EditPart Factory]根据模型创建对应的控制器[EditParts]。在控制器中通过它的设置图形方法来把EditPart与图形对应起来,这样模型、控制器和图形就一一对应了。

4.反馈技术

视觉反馈是一个图形化编辑器用户界面重要的组成部分。GEF用很多方法为用户提供反馈。

1.改变光标。当在图形化编辑器上选定目标时,改变光标来显示所选的目标是否支持该工具的操作。
2.区别被选的和被聚焦的部分。一般的,在相同类型的部分中,一个被选择的部分应该和没有被选择的部分明显的区分。这个可以通过在部分外增加一个被选择图形或改变部分的颜色或形状。
3.展示操作柄[handle]:操作柄也是一个图形元素,一般出现在部分的四周,它表示图形可以被移动或是改变大小。

一般反馈技术是由编辑策略[EditPolicy]实现的。具体实现的是EditPolicy的子类GraphicalEditPolicy。GEF提供一个反馈层,所有的反馈都在该层上显示。层本身就是一个图形,只不过对用户来说是透明的。

下面介绍一下支持反馈的EditPolicy :

1.SelectionEditPolicy :一个抽象类,它是提供控制器被选择的反馈基础。即当用户在编辑器上选中图形时,相应的图形给以相应的反应以区分选中的和未选中的。要注意的反馈图形被画在反馈层上[LayerConstants.FEEDBACK_LAYER]。有如下方法包括在该类中:

Protected void showFocus()
Protected abstract void showSelection()
protected void showPrimarySelection()
protected void showFocus()
protected abstract void hideSelection()
这几个方法的英文名字表示了它们的含义,这里就不再一一介绍。

2.SelectionHandlesEditPolicy :这个类继承了SelectionEditPolicy,它提供个带控制点[handle]的选择反馈。子类提供了一个控制点的List,该List将修饰被选择的[控制器对应的]图形。GEF中提供了如下继承SelectionHandlesEditPolicy的子类:

1.BendpointEditPolicy :这个类在实现带弯点的连接时,被连接的控制器调用。
2.ConnectionEndpointEditPolicy :在连接的两端展示控制点。
3.NonResizableEditPolicy :阻止用户改变图形大小,并在被选图形上添加一格简单的黑框和在四个边角处设置四个黑色小方框。
4.ResizableEditPolicy :这个类继承NonResizableEditPolicy,在图形的四周添加八个黑色小方框,用来增加改变图形大小功能。如图2所示。

2.GraphicalNodeEditPolicy :这个类提供关于连接的反馈。当用户建立连接,从一个端点拖向另一个端点,GEF通过该类模拟一个连接。这模拟的连接被画在反馈层,它将连接到控制器提供的锚点[Anchor]。

3.LayoutEditPolicy :这是一个抽象类,它用布局管理器[LayoutManager]来放置它的子控制器图形。该类应该提供反馈,一个新元素放到该类对应的图形中的反馈。注意,这里该类对应的图形应该是一个容器图形,即该图形包含子图形。关键方法如下:
1.showLayoutTargetFeedback :这个方法展示当前的操作将放图形在什么位置的反馈。
2.getSizeOnDropFeedback :展示将新建图形的大小。

5.拖拽技术

在现代的应用程序中,程序要实现的一个最重要功能就是拖拽。该部分将讨论GEF中的拖拽技术。
为了使用户在GEF应用中实现拖拽更加容易,GEF本身提供了一些类和概念。例如,你不需要处理SWT的拖拽源对象[DragSource]和其他低级别的对象。

在GEF中,用户需要实现的就是向编辑查看器[EditPartViewwe]添加拖拽源监听者[TransferDragSourceListener]和拖拽目标监听者[TransferDrogTargetListener]。前者的可以使编辑查看器成为拖拽源,即支持用户从该编辑查看器中往出拽,而后者可以使编辑查看器成为拖拽目标,即支持用户向该编辑查看器里拖。

当在GEF应用中为查看器实现拖拽监听者时,要确保该类继承的父类来自于GEF框架。
拖拽原理 :当用户在支持拖拽源的查看器上拽出时,GEF框架产生一个相应的模版对象,该对象将从框架中获得用户想要创建对象的类信息。当用户在支持拖拽目标的查看器上松开鼠标时,拖放结束的事件将产生,TemplateTransferDropTargetListener对象将根据模版对象创建相应的实例。
用户一般需要实现3个类 :
TemplateTransferDropTargetListener :是TransferDrogTargetListener的子类。
TemplateTransferDragSourceListener :是TransferDragSourceListener的子类。
CreationFactory :用来根据Template返回相应的对象。
分享到:
评论

相关推荐

    eclipse插件 GEF-SDK-3.4.0.zip

    GEF(Graphical Editing Framework)是Eclipse平台中的一个关键组件,专门用于构建图形化用户界面(GUI)和图形编辑器。本压缩包"GEF-SDK-3.4.0.zip"提供了GEF的软件开发工具包,帮助开发者在Eclipse环境中创建功能...

    maven_eclipse_GEF-zest-3.7.1_m2e-extras_m2e.zip

    总结来说,"maven_eclipse_GEF-zest-3.7.1_m2e-extras_m2e.zip"这个压缩包集合了Maven、Eclipse、GEF-Zest和m2e-extras的关键组件,旨在提供一个完整的、集成了图形化开发和Maven构建的开发环境。通过这个集成,...

    eclipse及gef相关文档

    在给定的压缩包中,我们有两个与Eclipse插件和图形编辑框架(GEF)相关的PDF文档,这些文档是学习和理解Eclipse生态系统的重要资源。 首先,"Eclipse Plug-ins Third Edition Dec. 2008.pdf"这本书籍可能涵盖了...

    EMF、GEF、VE 适合于Eclipse 3.2.0

    EMF(Eclipse Modeling Framework)、GEF(Graphical Editing Framework)和VE(Visual Editor)是Eclipse平台上用于构建图形化建模和编辑工具的关键技术。这些框架为开发人员提供了强大的工具,使他们能够轻松地...

    Eclipse-EMF-GEF资料.rar

    这个压缩包包含了关于这三个关键技术的各种参考资料,帮助开发者深入理解并应用它们。 1. **Eclipse-EMF (Eclipse Modeling Framework)**: EMF 是 Eclipse 的一个核心组件,它提供了一种基于 Java 的框架和工具,...

    基于GEF框架的SVG制作工具设计与实现

    《基于GEF框架的SVG制作工具设计与...总之,基于GEF框架的SVG制作工具设计与实现,是为了解决SVG编辑的挑战,通过提供可视化界面和优化的源码编辑功能,旨在提升SVG图形的创作效率,推动SVG技术在各领域的广泛应用。

    网络,服务,eclipse

    在提供的文档中,“基于Eclipse GEF关键技术的分析与研究.docx”和“GEF学习整理.docx”很可能是对GEF的深入解析和学习笔记,而“技术交流+--GEF.ppt”可能是关于GEF的演示或讲解材料。 GEF主要用于构建图形用户...

    自己动手写开发工具--基于Eclipse的工具开发

    通过本文的学习,读者将能够掌握Eclipse插件开发的基础知识,并通过实践案例了解如何利用SWT(Standard Widget Toolkit)、Draw2D、GEF(Graphical Editing Framework)以及JET(Java Extension Tools)等技术来开发...

    GEF的动态变化二

    可能包含关键帧动画、时间线控制、事件驱动的更新或者其他动画技术。 在GraphAnimation.java中,我们可能会看到以下知识点: 1. **图形对象的表示**:如何使用模型类来定义图形元素,这些元素可以是节点、边或更...

    基于eclipse的EMF插件开发图形化编辑程序

    总之,基于Eclipse的EMF插件开发图形化编辑程序是一项复杂但强大的技术,它可以帮助我们构建高度定制、模型驱动的软件系统。通过理解EMF的概念、插件开发原理以及图形化编辑的实现方法,开发者可以创建出直观、高效...

    gef版本的helloworld

    在当前的IT技术领域中,GEF(Graphical Editing Framework)是一个广泛应用的图形编辑框架,它是基于Eclipse平台的,通常与RCP(Rich Client Platform)结合使用,用于构建图形化的应用程序。GEF允许开发者通过提供...

    GEF实例教程PDF

    - **RCP (Rich Client Platform)**:基于Eclipse的富客户端平台,提供了一种构建高度可定制的桌面应用程序的方式。 - **步骤**: 1. **选择项目类型**:选择“Plug-in Project”作为项目类型。 2. **命名项目**:...

    GEF教程及demo源码

    **GEF教程及DEMO源码详解** ...总结,GEF教程及DEMO源码的学习,不仅能帮助开发者理解图形编辑框架的设计思想,还能掌握实际开发中的关键技术点。通过实践,可以快速上手并开发出满足特定需求的图形编辑工具。

    GEF Description

    ### GEF(Graphical Editing Framework)概述与应用 #### 一、GEF 是什么? GEF,全称为 Graphical Editing Framework(图形编辑框架),是 Eclipse 平台上一个强大的图形编辑框架,它为开发者提供了一套完整的...

    GEF_Tutorial.rar(GEF开发指南)

    本教程是针对想要学习和掌握GEF技术的开发者,通过实例教学,深入浅出地介绍GEF的使用方法和开发流程。 **1. GEF基础知识** GEF的核心概念包括模型(Model)、视图(View)和控制器(Controller)。模型是数据结构...

    GEF锚点鼠标定位

    在图形编辑框架(GEF,Graphical Editing Framework)中,锚点(Anchor)是一个关键概念,它是连接模型元素之间的连接线在元素上的固定点。在GEF中,锚点的定位直接影响到连接线的形状和行为,特别是当用户通过鼠标...

    gef入门学习项目源码

    1. **图元(Figure)与模型(Model)**:GEF基于MVC(Model-View-Controller)设计模式,其中图元表示视图,模型代表数据。图元是用户看到并与其交互的图形元素,而模型则是图元背后的逻辑数据。 2. **指挥者...

    GEF 入门教程 中文版

    GEF(Graphical Editing Framework),即图形编辑框架,是一种基于Java的技术,它作为Eclipse框架的一部分,由IBM开发。GEF为开发者提供了一整套解决方案,用于Java对象模型的图形化建模。它可以与EMF(Eclipse ...

Global site tag (gtag.js) - Google Analytics