`

GEF 请求和编辑策略

阅读更多
近期打算做界面定义的工具,重新学习了一下eclipse插件,下面是一些资料。
GEF 请求和编辑策略
2010-03-25 16:54
请求和编辑策略是GEF框架中减轻控制器的负担、减小代码耦合度而实现的一种解决方案。
1.请求和编辑策略(Request and EditPolicies)
    请求和编辑策略对初学者来说是比较难理解的部分,但正是因为这种机制才使得GEF框架功能强大,而且非常灵活。
    在EditPart中,可以通过设置不同的编辑策略(EditPolicies)来处理不同的请求,这样,一方面,可以把代码从EditPart中解放处理,分别由不同的EditPolicies进行处理,另一方面,用户可以着力于自己的关注点,但由此也增加了学习GEF框架的时间。
    另外,在EditPart中设置编辑策略时,要指定相应的角色(Role),角色只是一个标识,在同一个EditPart中不能存在两个相同角色的编辑策略,读者可以在GEF的联机文档(http://help.eclipse.org/help32/index.jsp?topic=/org.eclipse.gef.doc.isv/guide/guide.html )中找到详细的编辑策略、请求和角色说明。
2.编辑策略的实现
    控制器中通过createEditPolicies()方法添加编辑策略,每种编辑策略负责处理相应的请求。通常请求一般会对模型进行操作,在EditPolicies中,可以通过命令的方式操作模型,命令将在后面介绍。EditPolicies代码如下:
java 代码
  1. package com.example.policies;  
  2.   
  3. import org.eclipse.draw2d.geometry.Rectangle;  
  4. import org.eclipse.gef.EditPart;  
  5. import org.eclipse.gef.Request;  
  6. import org.eclipse.gef.commands.Command;  
  7. import org.eclipse.gef.editpolicies.XYLayoutEditPolicy;  
  8. import org.eclipse.gef.requests.CreateRequest;  
  9.   
  10. import com.example.commands.CreateNodeCommand;  
  11. import com.example.commands.MoveNodeCommand;  
  12. import com.example.model.Diagram;  
  13. import com.example.model.Node;  
  14. import com.example.parts.NodePart;  
  15.   
  16. public class DiagramLayoutEditPolicy extends XYLayoutEditPolicy {  
  17.   
  18.     protected Command createAddCommand(EditPart child, Object constraint) {  
  19.         return null;  
  20.      }  
  21.     //创建模型位置改变的命令  
  22.     protected Command createChangeConstraintCommand(EditPart child, Object constraint) {  
  23.         //如果位置改变的不是Node则返回  
  24.         if (!(child instanceof NodePart))  
  25.             return null;  
  26.         if (!(constraint instanceof Rectangle))  
  27.             return null;  
  28.   
  29.          MoveNodeCommand cmd = new MoveNodeCommand();  
  30.          cmd.setNode((Node) child.getModel());  
  31.         //设置模型新的位置信息  
  32.          cmd.setLocation(((Rectangle) constraint).getLocation());  
  33.         return cmd;  
  34.   
  35.      }  
  36.     //获得创建模型的命令  
  37.     protected Command getCreateCommand(CreateRequest request) {  
  38.         //判断请求创建的是否为Node  
  39.         if (request.getNewObject() instanceof Node) {  
  40.             //新建CreateNodeCommand  
  41.              CreateNodeCommand cmd = new CreateNodeCommand();  
  42.             //设置父模型  
  43.              cmd.setDiagram((Diagram) getHost().getModel());  
  44.             //设置当前模型  
  45.              cmd.setNode((Node) request.getNewObject());  
  46.              Rectangle constraint = (Rectangle) getConstraintFor(request);  
  47.             //设置模型的位置信息  
  48.              cmd.setLocation(constraint.getLocation());  
  49.             //返回Command对象  
  50.             return cmd;  
  51.          }  
  52.         return null;  
  53.      }  
  54.   
  55.     protected Command getDeleteDependantCommand(Request request) {  
  56.         return null;  
  57.      }  
  58. }  

    通过实现此编辑策略,GEF编辑器将能够处理XYLayoutEditPolicy所能响应的相关请求,并交由相应的Command进行处理。
分享到:
评论

相关推荐

    gef 转折线的相关方法实现和 GEF的API chm 格式

    - `org.eclipse.gef.editpolicies`包下的类:提供了各种编辑策略,如连接策略、布局策略等,它们决定了EditPart如何响应特定请求。 - `org.eclipse.gef.handles`包下的类:用于创建图形元素的手柄,用户可以通过手柄...

    GEF教程和demo源码

    1. **GEF架构**:文档会介绍GEF的核心组件,包括Model(模型)、View(视图)、Controller(控制器)和EditParts(编辑部件)。模型代表数据结构,视图负责展示,控制器处理用户交互,而EditParts则是视图和模型之间...

    Eclipse的GEF学习

    通过将复杂的编辑操作抽象为请求(Request)、角色(Role)、策略(EditPolicy)和命令(Command),GEF提供了一套灵活且强大的机制,让开发者可以专注于业务逻辑,而不必担心图形界面的具体实现细节。 #### 五、GEF在实际...

    GEF理解系列三

    在GEF(Graphical Editing Framework)中,理解其工作流程对于开发图形编辑工具至关重要。GEF主要用于构建基于SWT...通过不断实践和调试,开发者可以熟练掌握GEF的各种策略和命令,从而构建出功能丰富的图形编辑工具。

    Eclipse开发使用GEF和EMF(IBM 红皮书)中英文对照版

    《Eclipse开发使用GEF和EMF》是IBM红皮书系列中的一部经典著作,主要探讨了如何在Eclipse环境中利用GEF(图形编辑框架)和EMF( Eclipse模型框架)进行图形化应用程序的开发。这两项技术是Eclipse平台上的核心组件,...

    GEF快速入门教程和EMF教程

    本文详细介绍了如何使用GEF和EMF构建一个简单的“Hello World”示例。通过本教程,您应该能够理解GEF的基本结构和工作原理,以及如何在Eclipse RCP应用中集成GEF。此外,还介绍了如何设置项目依赖、创建编辑器以及...

    GEF 入门操作

    GEF通过请求(Request)和编辑策略(Edit Policies)以及命令(Commands)模式有效地分担了控制器的职责。当用户操作发生时,GEF将操作转化为请求,控制器接收请求并转发给适当的编辑策略,编辑策略则根据请求创建并...

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

    7. **自定义编辑策略**:解释如何实现特定的编辑行为,如添加、删除和修改元素的规则。 8. **图元工厂**:学习如何使用MetaFactory来创建和初始化图形对象,以及如何注册和使用它们。 9. **导出和导入**:讨论如何将...

    GEF学习资料.zip

    4. **编辑域(Edit Domain)**:编辑域是GEF环境中最高级别的容器,管理所有的编辑部分和参与者,负责全局事件的处理和协调。 5. **编辑部分(Edit Part)**:编辑部分是视图中的可交互区域,通常对应模型中的一个...

    java gef开发实例

    GEF是Eclipse平台上用于构建图形编辑器的库,它提供了构建图形用户界面(GUI)所需的基础结构,尤其适合创建复杂的图表和流程图编辑器。在本实例中,我们将探讨如何利用GEF实现一个简单的MVC(Model-View-Controller...

    RCP与GEF课件,介绍RCP和GEF各组成部分和工作原理

    GEF支持创建各种图形用户界面,包括绘图工具、流程图和模型编辑器。 GEF的主要组件包括: 1. **Model**:模型是数据结构,包含了图形元素的信息。它可以是简单的数据结构,也可以是复杂的领域模型。 2. **Edit ...

    [翻译]Eclipse图形化编辑框架(GEF)/更新第7章:层和视图

    Eclipse图形化编辑框架(GEF)通过层和视图的机制,提供了强大的图形编辑工具构建能力。层的管理使得元素的绘制和交互更加灵活,而视图则提供了展示模型数据的多种方式。通过深入学习第7章的内容,开发者能够更高效地...

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

    开发GEF插件需要安装Eclipse IDE for RCP and RAP Developers,以及GEF和EMF等相关库。通过Eclipse的插件开发环境,你可以调试、运行和测试你的图形编辑器。 5. **学习资源与进阶** 对于深入学习GEF,可以参考...

    GEF入门学习资料,简单地介绍了GEF使用过程中用到的基本类和函数的用法

    这样可以帮助我们更好地理解 GEF 的各个组件和函数的用法,并且能够更好地应用 GEF 实现图形化编辑模型的功能。 学习 GEF 需要了解 Eclipse 平台和 EMF 的基础知识,了解 GEF 的基本类和函数的用法,并且学习 GEF ...

    GEF教程

    总的来说,GEF框架的学习虽然充满挑战,但其在图形编辑领域的强大功能和灵活性使其成为开发者不可多得的利器。通过系统的学习和实践,尤其是参考“八进制”Blog上的详尽教程,开发者能够逐渐掌握GEF框架的精髓,从而...

    GEF典型实现例子

    5. **图元工厂(FigureFactory)和编辑政策(EditPolicy)**:前者用于创建和管理图形元素,后者定义了特定编辑行为的规则和策略。 通过阅读“Gef.doc”文档,你可以了解GEF的基本用法、API介绍以及示例代码。博客...

    自己下的GEF资源打包

    这个资源包可能包含了对理解、学习和使用GEF非常有帮助的材料。描述进一步说明了这个包中包含的具体内容,如“GEF_Tutorial”、“GEF实例”、“入门教程”以及“GEF-whole-upload”,这些都暗示了这是一个全面的学习...

    GEF中文教程+代码

    - **Step 10-11**:高级特性,如自定义编辑策略、图元工厂和工具栏的添加。 **4. 代码示例** 每个步骤的代码文件(gef.tutorial.step* .zip)应该包含了实现相应功能的Java源代码。这些代码实例可以帮助读者更好地...

    GEF Example Source Code

    通过深入研究这两个压缩包,开发者可以学习如何结合使用GEF和Zest来创建强大的图形编辑器。这可能涉及到以下知识点: - **图元(Figure)和图形层次结构**:了解如何创建自定义图元,以及如何组织它们形成层次结构...

Global site tag (gtag.js) - Google Analytics