0

我目前正在使用 Eclipse GEF 构建一个编辑器。可以通过编辑器添加新部件并重命名它们。

但是我对元素的移动有一点问题。当用鼠标拖动它们时,当我释放鼠标并且元素不会与另一个元素碰撞时,它们不会移动。
元素的位置存储在一个EMap(模型是用 EMF 制作的)中。视图中的更改使用put地图的方法保存。

在使用调试器进行检查时,我注意到命令已执行,但视图尚未刷新。

我在模型中添加了一个适配器,但notifyChanged系统没有调用它。

public class ViewAdapter implements Adapter { 
    @Override 
    public void notifyChanged(Notification notification) { 
        refreshVisuals(); 
    } 
} 

ViewAdapter注册在 的激活方法中EditPart

会是什么呢?

4

1 回答 1

2

当您使用地图时,普通Adapter接口将不起作用,因为它只监听地图条目的添加或删除。

如果你想监听地图元素的变化,你应该使用 anEContentAdapter来代替:

public class ViewAdapter extends EContentAdapter {
    @Override
    public void notifyChanged(Notification notification) {
        refreshVisuals();
        super.notifyChanged(notification);
    }
}

调用 super 方法很重要,以便将映射条目的通知转发到映射本身。

于 2011-11-14T12:34:35.050 回答