我尝试使用简单的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());
是问题所在。如果我删除它,它按预期工作。目前我还不完全理解为什么......如果有人可以解释的话会很棒。
答案 0 :(得分:0)
您必须在需要时手动设置父图的大小。
figure.setSize(figure.getPreferredSize());
图代表计算它更喜欢它的布局(如果存在)。 XYLayout将计算最小尺寸以表示内容。
我认为插入此代码的最佳位置是父EditPart的setLayoutConstraint。