我尝试获得一个简单的工作 GEF 编辑器。我有一个GraphicalEditorWithPalette
创建我的示例模型。我有一个RootEditPart
覆盖createFigure
, getModelChildren
像这样:
public class RootEditPart extends AbstractGraphicalEditPart {
@Override
protected IFigure createFigure() {
Figure figure = new Figure();
figure.setOpaque(true);
figure.setLayoutManager(new XYLayout());
figure.setSize(1000, 1000);
return figure;
}
@Override
protected List<Positionable> getModelChildren() {
return getModel().getChildren();
}
// More methods ...
}
我有一个 ChildEditPart,它创建一个标签并refreshVisuals
像这样覆盖:
public class ChildEditPart extends AbstractGraphicalEditPart {
@Override
protected void refreshVisuals() {
RDC rdc = getModel();
Label nameLabel = (Label) getFigure();
nameLabel.setText(rdc.getName());
Point position = rdc.getPosition();
Rectangle r = new Rectangle(position.x, position.y, -1,-1);
((GraphicalEditPart) getParent()).setLayoutConstraint(this, nameLabel, r);
}
// More methods ...
}
这按预期工作。但我不想为容器设置固定大小。相反,我尝试使容器大小适应孩子。如果我删除figure.setSize(1000, 1000);
孩子们就不会再画了。我的错误是什么?
编辑:
也许重要的是要知道我的编辑器像这样配置根编辑部分:viewer.setRootEditPart(new ScalableFreeformRootEditPart());
Edit2:
似乎实际上电话viewer.setRootEditPart(new ScalableFreeformRootEditPart());
是问题所在。如果我删除它,它会按预期工作。目前我不完全理解为什么......如果有人能解释一下会很棒。