2015-09-12 62 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);,現在我可以看到網格。希望很多人能因爲這個答案而節省時間。