2015-09-12 40 views
0

我正在尝试使用GEF查看器的“对齐网格”功能。我正在按照教程this site。本教程主要讲述安装必要的编辑政策和重写getAdapter方法如下图所示:Eclipse GEF - 对齐网格不起作用

@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方法不会被调用了SnapToHelper实例,它证实了我放一个println方法。 我错过了什么?

+0

您是否安装了编辑策略?你是否将按钮添加到工具栏来激活它? – vainolo

+0

是的,我在根编辑部分和节点编辑部分安装了编辑策略 – ssdimmanuel

+0

我在将按钮添加到工具栏时遇到了一些问题。因此将操作添加到上下文菜单 – ssdimmanuel

回答

0

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

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; 
} 

在上述方法中,使用f.setOpaque(true);事先藏格而所有这一切,并已花了我几天的时间才能弄清楚。我现在已将其更改为f.setOpaque(false);,现在我可以看到网格。希望很多人能因为这个答案而节省时间。