java为什么在删除容器的绝对大小时不绘制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());
就是问题所在。如果我删除此项,它将按预期工作。目前我不完全明白为什么。。。如果有人能解释就好了
# 1 楼答案
当需要时,你必须手动设置父母的体型大小
figure代表计算它的首选大小而不是布局(如果存在)。 XYLayout将计算表示内容的最小大小
我认为插入此代码的最佳位置是父EditPart的setLayoutConstraint