我正在尝试为GEF查看器使用“Snap to Grid”功能。我正在this site关注教程。本教程主要讨论如何安装必要的编辑策略并覆盖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
实例调用SnapToHelper
方法,我通过放置println
方法确认该实例。
我错过了什么吗?
答案 0 :(得分:0)
经过一番研究,我了解到我犯了一个微不足道的错误,花了几天时间弄明白。典型createFigure
的{{1}}方法的代码段如下:
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);
,现在我可以看到网格。希望很多人可以节省时间,因为这个答案。