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

请问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);
}

}

有人告诉我是什么原因 让我不能实现删除的功能吗?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值