请问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入门系列,八进制 的GEF入门系列教程, 由社区经作者授权后整理而成GEF(Graphical Editor Framework)是一个图形化编辑框架,它允许开发人员以图形化的方式展示和编辑模型,从而提升用户体验。这样的应用程序有很...
由于工作的需要,最近开始研究GEF(Graphical Editor Framework)这个框架,它可以用来给用户提供图形化编辑模型的功能,从而提升用户体验,典型的应用如图形化的流程设计器、UML类图编辑器等等。
**GEF(Graphical Editing Framework)** 是一个用于构建图形化编辑器的开源框架,它在Eclipse平台上广泛使用,特别是在开发复杂的图形用户界面和工具时。本资料集旨在为初学者提供一个全面的入门指南,帮助理解GEF...
通过学习"GEF入门系列宝典",开发者可以逐步掌握如何利用GEF创建功能丰富的图形编辑器,从而提升Eclipse IDE的定制性和效率。文档中可能详细介绍了每个步骤,并提供了示例代码和实践指导,帮助读者理解和应用这些...
"GEF入门系列宝典.doc"可能更侧重于实践,提供逐步的教程和实例,帮助初学者快速上手。它可能包含一些实际的代码示例,教你如何构建一个简单的图形编辑器,例如绘制流程图或网络拓扑图。 通过学习这两份资料,你将...
**GEF(Graphical Editing Framework)入门系列** GEF,全称为Graphical Editing Framework,是Eclipse项目中的一个核心组件,主要用于构建图形化编辑器。它提供了一个强大的框架,允许开发者创建可定制、灵活且...
**GEF入门系列 PDF 格式资料** GEF(Graphical Editing Framework)是Eclipse开源组织推出的一个图形编辑框架,主要用于构建可视化的图形编辑工具。它为开发人员提供了丰富的API和设计模式,使得创建复杂的图形用户...
通过这个入门系列的学习,新手开发者将能够熟练运用EMF和GEF构建高效、直观的图形用户界面和模型驱动的应用程序,提升软件开发的效率和质量。同时,这也为深入研究更高级的MDD(Model Driven Development)技术打下...
### GEF(Graphical Editing Framework)入门教程知识点详解 #### 一、简介 GEF(Graphical Editing Framework),即图形编辑框架,是一种基于Java的技术,它作为Eclipse框架的一部分,由IBM开发。GEF为开发者提供...
这个入门学习例子旨在帮助初学者理解GEF的基本用法和核心概念,通过实例展示如何利用GEF实现工具栏、菜单栏、属性栏以及图形的交互功能,如移动、删除、撤销、连线等,并涵盖了大纲视图和鹰眼功能的实现。...
【GEF入门版中文教程 源码】是针对RCP(Rich Client Platform)平台下图形编辑框架(Graphical Editor Framework,简称GEF)的学习资源,特别适合初学者。RCP是Eclipse组织提供的一种用于构建桌面应用的框架,而GEF...
总之,通过这个"GEF入门实例代码2",开发者可以了解到如何在Eclipse中构建一个基于GEF的图形编辑器,这不仅涉及数据模型的设计,还包括视图的绘制、用户交互的处理以及可撤销/重做机制的实现。通过实践,开发者可以...
Gef入门开发,详细解析。 Gef入门开发,详细解析 Gef入门开发,详细解析
GEF(Graphical Editor Framework)是一个图形化编辑框架,它允许...提供上下文菜单和键盘命令; 提供图形的缩放功能; 提供一个大纲视图,显示编辑区域的缩略图,或是树状模型结构; 支持撤消/重做功能; 等等。
### GEF及GMF入门学习知识点详解 #### 一、GEF与GMF概述 - **GEF**(Graphical Editing Framework)是Eclipse提供的一个用于构建图形编辑器的框架,它提供了一套完整的API来支持图形化界面的创建、编辑和管理。GEF...
### GEF快速入门教程与EMF教程概览 #### GEF HelloWorld 示例详解 本文将详细介绍如何使用Graphical Editing Framework (GEF)实现一个简单的“Hello World”示例,并结合Eclipse Modeling Framework (EMF)进行扩展...