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

GEF理解系列五(2)

    博客分类:
  • GEF
 
阅读更多

二、新建连接模型

新建连接模型,过程大同小异。此时需要在结点模型上安装Policy,Policy的类型为:GraphicalNodeEditPolicy。

在HelloWorldEditPart的createEditPolicies()方法里追加:

installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, new HelloWorldGraphicalNodeEditPolicy());

其中HelloWorldGraphicalNodeEditPolicy是我们的Policy实现类。还是一样,先完成Command,再回过头来完成Policy。

要成功的实现一个连接,首先我们知道至少需要有三个对象:连接线、源结点和目标结点。所以我们的command的可以如下实现: 这时显示出来的效果和上一节一样:能创建,不显示。还是因为没刷新的问题。增加一个刷新事监听即可。如下:

public class AddConnectionCommand extends Command {

      private AbstractConnectionModel connection;

 

      public AddConnectionCommand(AbstractConnectionModel connection) {

            super();

            this.connection = connection;

      }

 

      public void setSrc(HelloWorldModel src) {

            connection.setSrc(src);

      }

 

      public void setTarget(HelloWorldModel target) {

            connection.setTarget(target);

      }

 

      public void setConnection(AbstractConnectionModel connection) {

            this.connection = connection;

      }

 

      @Override

      public void execute() {

            connection.attachSource();

            connection.attachTarget();

      }

 

      @Override

      public void undo() {

            connection.deattachTarget();

            connection.deattachSource();

      }

 

}

然后我们实现我们的Policy。这里要分两步进行,首先是完成源结点的连接,然后就完成目标结点的连接,代码如下:

      @Override

      protected Command getConnectionCompleteCommand(

                  CreateConnectionRequest request) {

            AddConnectionCommand command = (AddConnectionCommand) request

                        .getStartCommand();

            command.setTarget((HelloWorldModel) getHost().getModel());

            return command;

      }

 

      @Override

      protected Command getConnectionCreateCommand(CreateConnectionRequest request) {

            AddConnectionCommand command = new AddConnectionCommand(

                        (AbstractConnectionModel) request.getNewObject());

            command.setSrc((HelloWorldModel) getHost().getModel());

            request.setStartCommand(command);

            return command;

      }

 

修改HelloWorldModel里与连接相关的四个方法如下:

      public static final String P_SOURCE = "p_source";

      public static final String P_TARGET = "p_target";

      public void addInput(AbstractConnectionModel model) {

            if (!inputs.contains(model)) {

                  inputs.add(model);

                  firePropertyChange(P_TARGET, null, model);

            }

      }

 

      public void addOut(AbstractConnectionModel model) {

            if (!outputs.contains(model)) {

                  outputs.add(model);

                  firePropertyChange(P_SOURCE, null, model);

            }

      }

 

      public void removeInput(AbstractConnectionModel model) {

            if (inputs.contains(model)) {

                  inputs.remove(model);

                  firePropertyChange(P_TARGET, model, null);

            }

      }

 

      public void removeOut(AbstractConnectionModel model) {

            if (outputs.contains(model)) {

                  outputs.remove(model);

                  firePropertyChange(P_SOURCE, model, null);

            }

      }

 

然后再修改对应的EditPart的propertyChange()方法如下:

      public void propertyChange(PropertyChangeEvent evt) {

            if(evt.getPropertyName().equals(HelloWorldModel.P_CONSTRAINT)){

                  refreshVisuals();

            }else if(evt.getPropertyName().equals(HelloWorldModel.P_SOURCE)){

                  refreshSourceConnections();

            }else if(evt.getPropertyName().equals(HelloWorldModel.P_TARGET)){

                  refreshTargetConnections();

            }

      }

最后试一下效果:

addConnection

图三

 小提示:EditPolicy的getHost()方法返回的是安装这个Policy的那个对象。也就是安装这个Policy的那个EditPart。

分享到:
评论

相关推荐

    GEF理解系列三

    在GEF(Graphical Editing Framework)中,理解其工作流程对于开发图形编辑工具至关重要。GEF主要用于构建基于SWT和JFace的图形用户界面,它提供了丰富的功能来处理图形元素的绘制、操作和交互。本篇文章将深入探讨...

    GEF理解系列二

    【GEF理解系列二】是深入学习GEF框架的第二部分,主要讲解如何配置和初始化Editor,以及如何创建多层结构以支持添加多个图形。GEF(Graphical Editing Framework)是一个用于构建图形编辑器的开源框架,常用于开发...

    GEF入门必读 GEF入门系列 GEF-whole-upload

    本资料集旨在为初学者提供一个全面的入门指南,帮助理解GEF的基础概念和实现方法。 GEF的核心功能是提供了一套强大的组件和API,用于创建可交互的、图形式的用户界面。通过使用GEF,开发者可以轻松地创建出具有拖放...

    Eclipse插件开发:GEF入门系列宝典

    2. **GEF框架**: - GEF提供了图形编辑的基础组件,如模型、视图、控制器(MVC)架构。 - 它提供了一套图形工具,如绘图工具、选择工具和连接线工具。 - GEF支持命令模式,使得操作可以撤销/重做。 - 它还包含...

    GEF入门系列 pdf 格式资料

    **GEF入门系列 PDF 格式资料** GEF(Graphical Editing Framework)是Eclipse开源组织推出的一个图形编辑框架,主要用于构建可视化的图形编辑...在阅读过程中,建议结合实际编程实践,以便更好地理解和掌握GEF的精髓。

    GEF入门系列

    - 示例代码:Eclipse项目中包含多个GEF示例,是学习和理解GEF的好资料。 - 在线教程:互联网上有许多博客和教程,针对不同水平的学习者提供了丰富的教学内容。 通过这个GEF入门系列,你可以逐步掌握如何利用GEF...

    EMF_GEF_入门系列

    本入门系列旨在帮助初学者快速理解并掌握这两个强大的工具。 EMF是Eclipse项目的一部分,它提供了一种模型驱动的开发方式。EMF允许开发者创建、存储和操作数据模型,这些模型可以用来表示复杂的数据结构或业务逻辑...

    GEF-ALL-3.7+GEF-ALL-3.8+GEF_Draw2d学习资料

    2. "GEF入门系列(一、Draw2D).doc" 可能是一个逐步的教学系列,从基础的Draw2D开始,逐步引入GEF的概念和应用。 3. "如何在Eclipse3.3.1.1中安装VE,emf,GEF插件.doc" 提供了在特定版本的Eclipse中安装相关插件的步骤...

    Eclipse插件开发--gef开发指南与入门系列宝典

    2. GEF的基本概念:深入理解模型、表示层、编辑器和控制器的概念。 3. 编辑器的生命周期:学习编辑器的创建、打开、保存和关闭过程。 4. 图形元素的定义:创建自定义的图形节点和连接线,定义它们的外观和行为。 5. ...

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

    这个实例代码2是《Eclipse插件开发》教程中的一部分,旨在帮助初学者理解如何利用GEF来创建自定义的图形编辑器。在Eclipse插件开发中,GEF提供了一套强大的框架,使得开发者可以方便地构建出功能丰富的图形用户界面...

    GEF教程

    为了帮助读者更好地理解GEF框架的实际应用,作者提供了由简至繁的一系列示例项目。这些项目按序排列,从最简单的pt1开始,逐步添加新功能,最终形成一个具备DirectEdit、Palette等功能的图形编辑器。这种逐步递进的...

    GEF入门学习例子

    这个入门学习例子旨在帮助初学者理解GEF的基本用法和核心概念,通过实例展示如何利用GEF实现工具栏、菜单栏、属性栏以及图形的交互功能,如移动、删除、撤销、连线等,并涵盖了大纲视图和鹰眼功能的实现。...

    简单gef框架

    4. **流程设计基础**:在gef框架下进行流程设计,首先要明确流程的目标和步骤,这可能涉及到对程序逻辑的理解和拆解,将复杂的任务分解为一系列可执行的子任务。这通常需要扎实的编程基础和问题解决能力。 5. **gef...

    GEF基础知识

    - **Control(控制器)**:这部分主要是由一系列`EditPart`组成,它们是GEF的核心组件。每个`EditPart`都对应于模型中的某个元素,并负责处理用户交互。 #### 四、Draw2D的核心组件——LightweightSystem **...

    GEF 入门教程 中文版

    ### GEF(Graphical Editing Framework)入门教程知识点详解 #### 一、简介 GEF(Graphical Editing Framework),即图形编辑框架,是一种基于...希望您能够通过实践加深对GEF的理解,并成功地应用于自己的项目中。

    gef-step3.zip_3gef_GEF eclipse_GEF-step2_gef_gef-st

    **3gef**可能是这个系列教程的一个特定版本或者阶段,强调了对GEF的三次迭代改进或深化理解。这可能涉及到更高级的功能,如图形的动态更新、自定义手势识别或者与其他Eclipse插件的集成。 **gef_eclipse**标签表明...

    eclipse_gef_example.rar

    这个"eclipse_gef_example.rar"压缩包提供了一系列的例子,帮助开发者更好地理解和掌握GEF框架。以下是对每个部分的详细解释: 1. **org.eclipse.gef.examples.text** 这个部分主要展示了如何在GEF环境中处理文本...

    GEF Description

    GEF 提供了一系列组件和技术,帮助开发者轻松地解决上述问题。 ##### 3.1 数据模型与视图的关联 GEF 通过引入“模型-视图-控制器”(Model-View-Controller,MVC)架构模式,将数据模型、视图和控制器分开处理,...

Global site tag (gtag.js) - Google Analytics