`
Jameslyy
  • 浏览: 401776 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

GEF (二) -- 创建模型的可视化视图(Graphical View)

阅读更多

  创建了模型和显示模型图形之后,下一步就是把它们联系起来,也就是创建关联模型和图形的editpart。GEF提供的实现是抽象的,你必须进行扩展。但是,首先我们应该建立其基础。

 

  GEF提供了ScrollingGraphicalViewer 类(一种对GraphicalViewer的实现),它使用Draw2d Figure Canvas ,大多数应用使用viewer,除非由于一些原因,不需要滚动条。下一步确定使用那一个root editpart,每一个editpart viewer需要一个叫做根的特殊editpart,这个editpart不对应任何模型,它的功能是建立显示组件(viewer),并为所有应用的“真正的”editpart提供一个统一的上下文(context),有两种可以使用的实现:

 

  • ScalableRootEditPart - 提供一组标准的图层(layer)并支持缩放

  • ScalableFreeformRootEditPart - 和上面的相似,但是所有的图层遵守自由形状(freeform)接口,这是一个灵活和常用的root editpart。

  现在我们有了一个viewer和它的root editpart,所以下面我们为viewer设置一些内容(contents)。contents是指使viewer显示可视化图形的基础模型。viewer的EditPartFactory 负责维护contents和构造合适edipart,并设置为root editpart。它的图形加入在底层图层上,这时contents editpart将会重新使用EditPartFactory构造它的子editpart,然后子editpart继续创建它们自己的子editpart或连接connection,等等,直到所有的editpart和它们的视图都被创建

实现 Contents EditPart

  所以首先要实现的是contents editpart,还需要实现一个工厂factory,识别主模型对象并建立控制器editpart,这个editpart的模型为其他的图形提供基础背景,通常它甚至不需要绘制图形,但是仍然需要选择布局管理器(layout manager)和root editpart上的图形类型。通过覆盖createFigure() 控制需要绘制的图形。如果使用一个freeform的root editpart,contents figure必须实现freeform API,可以使用FreeformLayer 。布局管理器通常为XYLayout 或者FreeformLayout ,这根据使用root editpart是否是freeform的。

 

  在初始化期间,contents editpart 将会根据调用它的getModelChildren() 方法返回的列表值创建它的子editpart,editpart 应该覆盖这个方法返回一个模型对象列表,这些模型对象的editpart将会被创建。默认下,editpart会到EditpartFactory中创建每一个子editpart。

 

实现子EditParts

  图表包含的子图形一般称为节点,通常显示对用户有用的数据,这些图形或者是一个默认的图形,或者是一个定做的图形,或者是一个复合图形。在重多的视图viewer中,每一个editpart都会调用自己的refreshVisuals() 方法,这个方法负责在视图中反映模型的属性。在复杂的情况下,这个方法可以被分解为几个更小的工具方法。最后,当我们监听模型的变化时,这个方法或它的工具方法可以再被调用。

  如果图表中的一个子图形是一个拥有子图形的图形,需要象图表的根editpart(diagram editpart )一样覆盖getModelChildren() 这个方法。

 

加入Connection Editpart

  Connection Editpart是一种在图表中连接两个editpart的特殊的editpart,如果一个editpart是一个连接的source或者target,则可以称为节点,source和target节点通过一种共享的方式创建和管理连接,每一个节点editpart必须重写 getModelSourceConnections() getModelTargetConnections() 方法,返回模型对象关联的连接,然后GEF检查连接editpart是否被创建(被在另一端的其他节点),如果没有,则请求工厂factroy创建这个connection editpart。source节点负责创建连接图形并加入图标(diagram)。

 

  connection editpart 的图形必须是一个Draw2d Connetion 。connection editpart通过把source和target节点转换成NodeEditpart 设置图形的锚点(anchor)。source和target必须返回合适的锚点或者具有伪固定位置的锚点。

 

  有时,连接象其他图形一样,在模型中具有必须可视化的属性,甚至具有子连接,或者是连接到其他连接的节点。

 

总结

  到这里,我们已经解释了可视化模型的过程,这需要继承AbstractGraphicalEditPart 类,覆盖基于模型的一些方法,下面列出了这些方法:

  • createFigure() - 这个方法创建editpart的视图或图形,这个方法不需要在反映图形中反映模型的状态,这在refreshVisuals()方法中实现

  • refreshVisuals() - 这个方法在视图中反映模型的属性,复杂的控制器可以把这个方法分解成结各小的helper方法。

  • getModelChildren() - 调用这个方法,判断一个模型是否有子模型,并创建对应的子控制器editpart。

  • getModelSource/TargetConnections() - 和子模型类似,不过这里返回的模型元素是连接,这些连接的editpart是source或者target。

 

分享到:
评论

相关推荐

    GEF-runtime-3.5.0.zip

    - **Model-View-Controller (MVC)**: 鼓励良好的软件工程实践,将模型、视图和控制器分离。 - **EditParts**: 视图中的图形元素,负责呈现模型数据。 - **Connectors**: 用于连接不同图形元素的线条或路径。 **3. ...

    GEF-ALL-3.9.100.zip

    2. **视图(View)**:视图是模型的可视化表示,负责将模型数据转化为屏幕上的图形元素。GEF提供了各种图形元素(如线条、形状、连接器等)和交互方式,让开发者能轻松地创建复杂的图形界面。 3. **控制器...

    eclipse插件 GEF-SDK-3.4.0.zip

    GEF的设计遵循Model-View-Controller(MVC)模式,使得代码结构清晰,易于维护。 2. **版本3.4.0** GEF-SDK-3.4.0是该插件的一个特定版本,可能包含了对先前版本的改进和新功能。在Eclipse插件开发中,每个版本...

    GEF-whole-upload

    1. **创建模型类** - 定义图形元素的类,例如`NodeModel`和`LinkModel`。 - 这些类应该能够被GEF识别并处理。 2. **创建控制器类** - 实现具体的`EditPart`类,如`NodeEditPart`和`LinkEditPart`。 - `EditPart...

    GEF-ALL-3.3.zip

    GEF的核心概念包括模型、视图和控制器,遵循MVC(Model-View-Controller)设计模式,使得代码结构清晰,易于维护。 在描述中提到的“最新gef eclipse ve”,指的是GEF与Eclipse Visual Editor的结合。Eclipse ...

    GEF- runtime

    2. **视图(View)**:视图是模型的可视化表示,它将模型的数据转化为屏幕上的图形元素。GEF提供了绘制几何形状、连接线等基本图形的能力。 3. **编辑领域(EditPart)**:编辑领域是GEF的核心组件,它将模型与视图...

    GEF-runtime-3.5.2

    在详细讲解GEF时,我们可以了解到它基于MVC(Model-View-Controller)架构,其中模型存储数据,视图负责显示,而控制器处理用户的交互。GEF提供了丰富的API和工具,如Command Framework用于撤销/重做操作,Zest用于...

    GEF-SDK-3.2.1

    2. **视图(View)**:视图是模型的可视化表示,它将模型数据转换为屏幕上的图形元素。GEF提供了一套机制来映射模型对象到屏幕上的图形。 3. **编辑域(EditPart)**:编辑域是视图中的可编辑部分,它负责将模型...

    GEF-ALL-3.4.2(1).zip

    2. **View**:视图是模型的可视化表示,负责将模型中的数据呈现到屏幕上。GEF提供了多种视图类型,如树视图、表格视图和图形视图。 3. **EditPart**:编辑部分是视图和模型之间的桥梁,将模型的变化反映到视图上,...

    GEF-runtime-3.3.zip

    这些扩展使得GEF不仅仅局限于二维图形编辑,还能应对更复杂的可视化需求。 总的来说,"GEF-runtime-3.3.zip"为我们提供了一个强大且灵活的图形化编辑工具集,它简化了在Eclipse中开发图形用户界面的过程,使得...

    GEF-SDK-3.3.1.zip

    1. **GEF架构**:GEF的核心架构包括模型(Model)、视图(View)和控制器(Controller)三部分,遵循Model-View-Controller(MVC)设计模式,确保了良好的代码组织和可维护性。 2. **Zest图表库**:GEF通常与Zest...

    GEF-whole-upload.rar_gef_whole

    这个框架提供了一套完整的工具和接口,帮助开发者创建基于模型的图形用户界面,尤其适用于开发复杂的可视化编辑器。在【标题】"GEF-whole-upload.rar_gef_whole" 中,“GEF-whole”暗示了这是一个关于GEF全面介绍的...

    The Eclipse Graphical Editing Framework (GEF)

    GEF基于MVC(Model-View-Controller)设计模式,将图形界面分为模型、视图和控制器三个部分。模型存储数据,视图负责渲染,控制器处理用户交互。GEF提供了对这些组件的抽象类,方便开发者进行扩展和定制。 2. **...

    GEF-whole-upload.pdf

    而Editor则是RCP中最常用的组件之一,它不仅能够编辑文本,还能展示和编辑图形数据,GEF正是利用了Editor的这些特性,实现了图形数据的可视化编辑。 #### GEF的基本结构 GEF的核心架构由模型(Model)、控制器...

    eclipse3.4的可视化开发GEF

    Eclipse GEF(Graphical Editing Framework)是Eclipse平台中的一个核心组件,用于构建图形化编辑器和可视化工具。它为开发者提供了一套全面的API,帮助创建可扩展、交互式的图形用户界面,特别适用于开发模型驱动的...

    GEF入门实例代码2《Eclipse插件开发》中实例

    在Eclipse插件开发中,GEF提供了一套强大的框架,使得开发者可以方便地构建出功能丰富的图形用户界面(GUI),特别是用于绘制图表、流程图等可视化编辑场景。 1. **GEF基本概念** GEF包含了一系列的类和接口,如...

    The_Eclipse_Graphical_Editing_Framework__GEF_.zip

    GEF基于MVC(Model-View-Controller)设计模式,提供了一套完整的图形编辑工具包,包括模型管理、视图渲染、事件处理、编辑操作等。 二、核心概念 1. 模型(Model):模型是数据的抽象,存储了图形编辑器所要展示和...

    GEF入门系列

    - **View层**:展示模型数据的可视化表示,通过EditParts实现。 - **Controller层**:连接模型和视图,处理用户输入并更新模型。 - **Part层**:包含图形编辑器的顶级容器,如画布(Canvas)。 3. **GEF开发流程...

    eclipse下可视化编程插件

    GEF是一个在Eclipse平台上构建图形编辑器的框架,它为开发者提供了一套完整的工具和API,用于创建复杂的图形用户界面(GUI)和可视化应用程序。GEF的设计理念是模块化和可重用性,使得开发者能够快速地构建出符合...

    eclipse的GEF插件

    - **View**:视图是模型的可视化表示,负责将模型数据转化为屏幕上的图形元素。 - **Controller**:控制器处理用户的输入事件,更新模型或视图以响应这些事件。 3. **主要特性** - **图形编辑**:GEF提供了丰富...

Global site tag (gtag.js) - Google Analytics