Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse rcp Eclipse GEF-捕捉到网格不工作_Eclipse Rcp_Jface_Eclipse Gef - Fatal编程技术网

Eclipse rcp Eclipse GEF-捕捉到网格不工作

Eclipse rcp Eclipse GEF-捕捉到网格不工作,eclipse-rcp,jface,eclipse-gef,Eclipse Rcp,Jface,Eclipse Gef,我正在尝试对GEF查看器使用“捕捉到网格”功能。我现在正在学习教程。本教程主要讨论安装必要的编辑策略和覆盖getAdapter方法,如下所示: @Override public Object getAdapter(Class key) { System.out.println("snapping..." + key); if (key == SnapToHelper.class) { List<SnapToHelper> helpe

我正在尝试对GEF查看器使用“捕捉到网格”功能。我现在正在学习教程。本教程主要讨论安装必要的编辑策略和覆盖
getAdapter
方法,如下所示:

@Override
public Object getAdapter(Class key) {
    System.out.println("snapping..." + key);
    if (key == SnapToHelper.class) {
        List<SnapToHelper> helpers = new ArrayList<SnapToHelper>();
        if (Boolean.TRUE.equals(getViewer().getProperty(
                SnapToGeometry.PROPERTY_SNAP_ENABLED))) {
            helpers.add(new SnapToGeometry(this));
        }
        if (Boolean.TRUE.equals(getViewer().getProperty(
                SnapToGrid.PROPERTY_GRID_ENABLED))) {
            helpers.add(new SnapToGrid(this));
        }
        if (helpers.size() == 0) {
            return null;
        } else {
            return new CompoundSnapToHelper(
                    helpers.toArray(new SnapToHelper[0]));
        }
    }
    return super.getAdapter(key);
}
@覆盖
公共对象getAdapter(类密钥){
System.out.println(“捕捉…”+键);
if(key==SnapToHelper.class){
List helpers=new ArrayList();
if(Boolean.TRUE.equals)(getViewer().getProperty(
SnapToGeometry.PROPERTY_SNAP_ENABLED))){
添加(新的捕捉几何(this));
}
if(Boolean.TRUE.equals)(getViewer().getProperty(
SnapToGrid.PROPERTY(已启用网格){
添加(新SnapToGrid(此));
}
if(helpers.size()==0){
返回null;
}否则{
返回新的CompoundSnapToHelper(
toArray(新的SnapToHelper[0]);
}
}
返回super.getAdapter(键);
}
但是,在运行时,
getAdapter
方法从未使用
SnapToHelper
实例调用,我通过放置
println
方法确认了这一点。
我错过了什么吗?

经过研究,我知道我犯了一个小错误,花了我好几天时间才弄清楚。典型的
TopEditPart
createFigure
方法的代码片段如下:

protected IFigure createFigure() {
    Figure f = new FreeformLayer();
    f.setLayoutManager(new FreeformLayout());

    f.setBorder(new MarginBorder(1));
    // Create a layout for the graphical screen
    f.setOpaque(true);
    helpers = new ArrayList<SnapToHelper>();
    helpers.add(new SnapToGrid(this));
    CompoundSnapToHelper h = new CompoundSnapToHelper(
            helpers.toArray(new SnapToHelper[0]));

    return f;
}
受保护的IFigure createFigure(){
图f=新的FreeformLayer();
f、 setLayoutManager(新的FreeformLayout());
f、 新订单(新订单(1));
//为图形屏幕创建布局
f、 set不透明(true);
helpers=newarraylist();
添加(新SnapToGrid(此));
CompoundSnapToHelper h=新的CompoundSnapToHelper(
toArray(新的SnapToHelper[0]);
返回f;
}

在上述方法中,使用
f.setOpaque(true)一直隐藏着网格,花了我好几天的时间才弄清楚。我现在将其更改为
f.setOpaque(false)现在我可以看到网格了。希望许多人能因为这个答案节省时间。

您安装了编辑策略吗?是否将按钮添加到工具栏以激活此功能?是的,我在根editpart和节点editpart上安装了编辑策略。将按钮添加到工具栏时遇到一些问题。因此,将操作添加到上下文菜单中