`
windyer39
  • 浏览: 10531 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

GEF(gef入门系列附下载)里上下文菜单删除功能问答

UP 
阅读更多
请问GEF里上下文菜单删除功能怎么实现?
我以注册了上下文菜单 在要删除的EditPart里安装了ComponentEditPolicy的实现类 而且删除Command也实现了 但点击该图形时删除这项是灰的?发现没调用ComponentEditPolicy的实现类的createDeleteCommand()方法 请问我该怎么解决?


xuanhai 2006年07月04日 09:55
delete,redo,undo这几个不是GEF里已经实现了嘛


zhangbo198294 2006年07月04日 11:30
delete必须要策略支持? 我那个上下文菜单的DELTE项就是不能选择


zhangbo198294 2006年07月04日 17:30
求解啊!!!!!!!!!!!!!!!!!!


jbcode 2006年07月05日 09:31
我记得在MyContextMenuProvider里面实现下面的方法就行,不必注册在Editor类中.自定义的Action需要在Editor类的createActions()中注册。
public void buildContextMenu(IMenuManager menu) {
    action = actionRegistry.getAction(ActionFactory.DELETE.getId());
    if (action.isEnabled()) {
        menu.appendToGroup(GEFActionConstants.GROUP_EDIT, action);
    }
}


yanghuan 2006年07月05日 11:08
我也碰到相同的问题了,按照4楼的方法好像不行啊。能再解释的详细些吗?多谢啊~~


zhangbo198294 2006年07月05日 11:33
public void buildContextMenu(IMenuManager menu) {
       GEFActionConstants.addStandardActionGroups(menu);
       IAction action = getAction(ActionFactory.UNDO.getId());
       action.setText("撤消");
       menu.appendToGroup(GEFActionConstants.GROUP_UNDO,action);
       action = getAction(ActionFactory.REDO.getId());
       action.setText("重做");
       menu.appendToGroup(GEFActionConstants.GROUP_UNDO, action);
       action = getAction(ActionFactory.DELETE.getId());
       action.setText("删除");
       menu.appendToGroup(GEFActionConstants.GROUP_EDIT,action);
   }
   private IAction getAction(String actionId) {
       return actionRegistry.getAction(actionId);
   }
  
我已经实现了但还是不处理delete请求


zhangbo198294 2006年07月07日 16:21
郁闷啊 怎么GEF区的人气这么低啊 


zhangbo198294 2006年07月10日 20:50
up求解决办法!


vii779 2006年07月10日 21:56
你可以在在DelteAction
protected boolean calculateEnabled() {
   Command cmd = createDeleteCommand(getSelectedObjects());
   if (cmd == null)
       return false;
   return cmd.canExecute();
}




这个方法内部设个断点,跟踪调试一下是否创建了DeleteCommand

如果这个方法也不能被调用,你需要
buildContextMenu 的里面,调用一下action.isEnable()方法

大多数情况是没有创建cmd,有几种情况
1 getSelectedObjects() 返回的0个对象
2 你的editorpart可能没有安装合适的policy,你要跟踪调试,才能发新问题。


zhangbo198294 2006年07月11日 08:48
我没有DelteAction这个类?GEF不是自动提供了这种ACTIO吗?
action = getAction(ActionFactory.DELETE.getId());
    action.setText("删除");
    menu.appendToGroup(GEFActionConstants.GROUP_EDIT,action);
同过上面的方法得到DELETEACTION然后放到menu里


zhangbo198294 2006年07月11日 09:26
而且我在我的NODEPART里安装了继承ComponentEditPolicy的子类 


vii779 2006年07月11日 10:02
就是让你调试 GEF 提供的 DelteAction,以前开发的时候也碰到很多类似的问题,都是通过逐步调式才找到原因的。


zhangbo198294 2006年07月11日 10:02
我的NODEPART已经安装了对应的策略/**
    * 描述:创建编辑策略方法
    * */
   protected void createEditPolicies() {
       //安装ConnectionNodeEditPolicy 图形连接策略,处理连接请求
       this.installEditPolicy(EditPolicy.CONNECTION_ROLE,new ConnectionNodeEditPolicy());
       //安装WorkFlowComponentEditPolicy 流程组合编辑策略类,处理删除请求
       this.installEditPolicy(EditPolicy.COMPONENT_ROLE, new WorkFlowComponentEditPolicy());
   }


zhangbo198294 2006年07月11日 10:06
ublic class WorkFlowComponentEditPolicy extends ComponentEditPolicy {
  
   private static Logger logger = Logger.getLogger(WorkFlowComponentEditPolicy.class);
  
   public WorkFlowComponentEditPolicy(){}
  
   /**
    * 描述:创建删除命令对象方法
    * @param deleteRequest:组请求的对象
    * @return
    * */
   protected Command createDeleteCommand(GroupRequest deleteRequest) {
       logger.info("调用createDeleteCommand()方法");
       Object parent = getHost().getParent().getModel();
       Object child = getHost().getModel();
       if (parent instanceof WorkFlowModel){
           if(child instanceof ReadFileModel || child instanceof WriteFileModel || child instanceof StartModel || child instanceof EndModel) {
               logger.info("delete model");
               return new FigureDeleteCommand((WorkFlowModel)parent,(WorkFlowModel)child);
           }
       }
       return null;
   }
  
}

public class FigureDeleteCommand extends Command{
  
   private WorkFlowModel parent = null;
   private WorkFlowModel child = null;
  
   /**
    * 描述:构造方法
    * @param parent:父模型对象
    * @param child: 子模型对象
    * */
   public FigureDeleteCommand(WorkFlowModel parent,WorkFlowModel child){
       this.parent = parent;
       this.child = child;
   }
  
   /**
    * 描述:执行方法
    * */
   public void execute() {
       Assert.isNotNull(parent);
       Assert.isNotNull(child);
       parent.removeChildModel(child);  
    }
  
}

有人告诉我是什么原因 让我不能实现删除的功能吗?

分享到:
评论

相关推荐

    GEF入门系列.rar

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

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

    由于工作的需要,最近开始研究GEF(Graphical Editor Framework)这个框架,它可以用来给用户提供图形化编辑模型的功能,从而提升用户体验,典型的应用如图形化的流程设计器、UML类图编辑器等等。

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

    **GEF(Graphical Editing Framework)** 是一个用于构建图形化编辑器的开源框架,它在Eclipse平台上广泛使用,特别是在开发复杂的图形用户界面和工具时。本资料集旨在为初学者提供一个全面的入门指南,帮助理解GEF...

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

    通过学习"GEF入门系列宝典",开发者可以逐步掌握如何利用GEF创建功能丰富的图形编辑器,从而提升Eclipse IDE的定制性和效率。文档中可能详细介绍了每个步骤,并提供了示例代码和实践指导,帮助读者理解和应用这些...

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

    "GEF入门系列宝典.doc"可能更侧重于实践,提供逐步的教程和实例,帮助初学者快速上手。它可能包含一些实际的代码示例,教你如何构建一个简单的图形编辑器,例如绘制流程图或网络拓扑图。 通过学习这两份资料,你将...

    GEF入门系列

    **GEF(Graphical Editing Framework)入门系列** GEF,全称为Graphical Editing Framework,是Eclipse项目中的一个核心组件,主要用于构建图形化编辑器。它提供了一个强大的框架,允许开发者创建可定制、灵活且...

    GEF入门系列 pdf 格式资料

    **GEF入门系列 PDF 格式资料** GEF(Graphical Editing Framework)是Eclipse开源组织推出的一个图形编辑框架,主要用于构建可视化的图形编辑工具。它为开发人员提供了丰富的API和设计模式,使得创建复杂的图形用户...

    EMF_GEF_入门系列

    通过这个入门系列的学习,新手开发者将能够熟练运用EMF和GEF构建高效、直观的图形用户界面和模型驱动的应用程序,提升软件开发的效率和质量。同时,这也为深入研究更高级的MDD(Model Driven Development)技术打下...

    GEF 入门教程 中文版

    ### GEF(Graphical Editing Framework)入门教程知识点详解 #### 一、简介 GEF(Graphical Editing Framework),即图形编辑框架,是一种基于Java的技术,它作为Eclipse框架的一部分,由IBM开发。GEF为开发者提供...

    GEF入门学习例子

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

    GEF 入门版中文教程 源码

    【GEF入门版中文教程 源码】是针对RCP(Rich Client Platform)平台下图形编辑框架(Graphical Editor Framework,简称GEF)的学习资源,特别适合初学者。RCP是Eclipse组织提供的一种用于构建桌面应用的框架,而GEF...

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

    总之,通过这个"GEF入门实例代码2",开发者可以了解到如何在Eclipse中构建一个基于GEF的图形编辑器,这不仅涉及数据模型的设计,还包括视图的绘制、用户交互的处理以及可撤销/重做机制的实现。通过实践,开发者可以...

    GEF新手入门必备资料

    Gef入门开发,详细解析。 Gef入门开发,详细解析 Gef入门开发,详细解析

    GEF入门详解DOC文档

    GEF(Graphical Editor Framework)是一个图形化编辑框架,它允许...提供上下文菜单和键盘命令; 提供图形的缩放功能; 提供一个大纲视图,显示编辑区域的缩略图,或是树状模型结构; 支持撤消/重做功能; 等等。

    GEF及GMF入门学习

    ### GEF及GMF入门学习知识点详解 #### 一、GEF与GMF概述 - **GEF**(Graphical Editing Framework)是Eclipse提供的一个用于构建图形编辑器的框架,它提供了一套完整的API来支持图形化界面的创建、编辑和管理。GEF...

    GEF快速入门教程和EMF教程

    ### GEF快速入门教程与EMF教程概览 #### GEF HelloWorld 示例详解 本文将详细介绍如何使用Graphical Editing Framework (GEF)实现一个简单的“Hello World”示例,并结合Eclipse Modeling Framework (EMF)进行扩展...

Global site tag (gtag.js) - Google Analytics