`
LuChar
  • 浏览: 74807 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

GEF原理及实现系列(五、请求和编辑策略)

    博客分类:
  • GEF
阅读更多
请求和编辑策略是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.jar` 包含了GEF框架的核心库,提供图形编辑器构建所需的所有类和接口。 - `commons-logging.jar` 是Apache Commons Logging库,是一个日志接口抽象层,允许在运行时选择不同的日志实现。在GEF开发中,它用于...

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

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

    GEF理解系列三

    总之,GEF通过将图形操作分解为请求、Policy和Command,实现了灵活且可扩展的图形编辑环境。理解这一机制有助于开发者更高效地构建自己的图形编辑应用,包括实现图形的移动、缩放以及更多复杂的交互功能。通过不断...

    GEF典型实现例子

    源码标签表明内容可能包含了实际的代码示例,这对于学习和理解GEF的工作原理和如何在实际项目中应用非常有帮助。工具标签则暗示了这个例子可能涉及到了使用GEF作为开发工具或者集成到其他工具链中的情况。 文件名...

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

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

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

    通过命令,开发者可以解耦UI和实现,使得功能可以独立于其表示进行定义和扩展。 6. **Property and Selection Services**:属性服务和选择服务允许不同组件之间共享信息和协调行为,如传递当前选中的对象。 **GEF...

    GEF实现拷贝粘贴

    总的来说,理解和实现GEF中的拷贝粘贴功能需要对GEF框架有深入的理解,包括其命令模型、EditPolicy和模型-视图交互。通过这种方式,开发者可以为自己的图形编辑器提供与操作系统一致的拷贝粘贴体验。

    eclipse gef原理的详细介绍PPT,很有参考价值

    **GEF(Graphical Editing Framework)深度解析** GEF,全称为Graphical Editing Framework,是Eclipse平台下用于构建图形编辑器的...通过深入理解GEF的原理和实践,开发者可以更高效地构建出功能丰富的图形编辑应用。

    GEF教程及demo源码

    本教程将深入探讨GEF的核心概念和应用,通过分析提供的DEMO源码,帮助读者掌握其设计模式和实现技巧。 **1. GEF概述** GEF主要由三部分组成:MVC(Model-View-Controller)、Command和Zest。MVC模式用于分离数据...

    GEF入门系列 pdf 格式资料

    通过这些资料,学习者可以系统地学习GEF的各个方面,包括基本原理、实例演示和实战技巧,从而具备开发图形编辑器的能力。在阅读过程中,建议结合实际编程实践,以便更好地理解和掌握GEF的精髓。

    GEF入门系列

    通过这个GEF入门系列,你可以逐步掌握如何利用GEF创建强大的图形化编辑器,无论是简单的绘图工具还是复杂的业务流程编辑器,GEF都能提供坚实的技术支持。在实践中不断探索和学习,你将能够充分发挥GEF的潜力,构建出...

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

    - 编写编辑策略和操作,实现图形编辑功能。 - 添加菜单和工具栏项,与用户交互。 6. **事件处理和命令**: - GEF使用命令架构来处理用户操作,如添加、删除和修改图形元素。 - 命令可以记录并执行,实现撤销/...

    EMF_GEF_入门系列

    开发者可以通过实现GEF提供的接口和回调方法,轻松地定制自己的图形编辑器,用于创建流程图、网络拓扑图、UML模型等各种图形表示。 本入门系列将涵盖以下几个主要知识点: 1. **EMF基础**:首先会讲解EMF的核心...

    GEF教程及demo源码GEF_RCP_DEMO.zip

    GEF的核心是其五层架构,包括Model(模型)、View(视图)、EditPart(编辑部件)、Figure(图形)和Command(命令)。模型负责存储数据,视图负责显示数据,EditPart作为模型和视图之间的桥梁,Figure处理图形绘制...

    GEF入门系列.rar

    GEF入门系列,八进制 的GEF入门系列教程, 由社区经作者授权后整理而成GEF(Graphical Editor Framework)是一个图形化编辑框架,它允许开发人员以图形化的方式展示和编辑模型,从而提升用户体验。这样的应用程序有很...

    GEF快速入门教程和EMF教程

    通过本教程,您应该能够理解GEF的基本结构和工作原理,以及如何在Eclipse RCP应用中集成GEF。此外,还介绍了如何设置项目依赖、创建编辑器以及实现GEF的基本组件。这些步骤不仅适用于本教程的示例,也是构建更复杂...

    Eclipse的GEF学习

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

    GEF 入门操作

    总结来说,GEF是一个强大的图形化编辑框架,它通过MVC模式和一系列设计策略,如请求和命令模式,降低了开发图形界面的复杂性。同时,模型和视图的解耦使得系统具有更高的灵活性,使得开发者可以专注于业务逻辑的实现...

Global site tag (gtag.js) - Google Analytics