[Eclipse RCP] GEF中connection删除的问题

min12605 2008-10-14
我在写一个基于EMF和GEF的设计器,现在是我完成了在一个Editor中创建一个连线connection的工作,但是当我写了DeleteConnectionCommand类,想通过delete action来删除时,在模型上已经把选中的连线删除了,但是在Editor中联线依然存在,没有被删掉,我想问问大家是什么地方我没有注意到吗?
defrag_sly 2008-10-15

说的太含糊了,能不能详细说说?
min12605 2008-10-15
不好意思啊,情况是这样的,我能添加连线,用的是自己模型里的connection,也在editor中添加了删除的action,并且可通过delete来删除创建的node。但是对于创建的连线就无法从图形上删除,但是后台的模型里显示,我选中的连线已经从Diagram试图中删除了。但是连线依然显示在图形上,没有任何改变。
lggege 2008-10-15
肯定是你没有通知 Parent EditPart 将这个Connection的EditPart删掉.
min12605 2008-10-15
谢谢,但是我还是没有理解,我的connection是包含在diagram里的,意思是需要在Diagram的editPart里删除吗?这样应该怎么操作啊?
我现在只是在图形上没有把连线删除,但是模型里的连线已经删除了。如果我删除后关闭Editor,再打开时,我删除的连线就都不在了。只是在图形上直接删除后,那个连线仍然存在。
我对gef理解还不够,希望大家多帮帮忙。
defrag_sly 2008-10-16
如果你是基于EMF/GEF下的应该不会存在,通知机制问题。建议你检查你connectionEditPart部分关于删除部分的policy和command,以及refresh的部分代码。
lggege 2008-10-16
GEF的通知机制:
EditPart 会监听 模型的变化, 模型在变化了以后 会firePropertyChange告诉 所有监听它的EditPart, EditPart 在得到通知后, 就需要对模型不同的变化 作出对应的改变.

所以, 你可以看看 在你的Diagram 模型删除Connection模型的时候, Diagram的EditPart 是否 接受到了改变的通知, [比如: propertyChange方法得到了 P_CHILDREN 的删除事件], 然后Diagram EditPart 是否将Connection的EditPart删除掉了.

min12605 2008-10-22
问题已经解决了,先谢谢大家的热心帮助。这段时间项目忙,没上来答复,不好意思啊

问题的原因是我在用emf建模的时候让Node和Connection这两个类相互继承的时候,设置的target和Incoming之间的对应关系给弄反了,即target和OutGoing对在一起,这样在删除时执行动作时对输入的数据无法操作,从而导致在后面的模型能成功差掉连线,但是图形上的显示不了。
Global site tag (gtag.js) - Google Analytics