如何解决为什么在删除容器的绝对大小时未绘制GEF子级?
| 我尝试获得一个简单的GEF编辑器。我有一个创建示例模型的“ 0”。我有一个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 ...
}
这按预期工作。但是我不想为容器设置固定大小。取而代之的是,我尝试使容器的尺寸适合孩子。如果我取下ѭ7,就不会再画孩子了。我怎么了
编辑:
也许重要的是要知道我的编辑器将根编辑部分配置为:viewer.setRootEditPart(new ScalableFreeformRootEditPart());
编辑2:
似乎实际上呼叫ѭ8是问题。如果我删除它,它将按预期工作。目前,我还不完全理解为什么……如果有人可以解释会很好。
解决方法
您需要在需要时手动设置父级图形的大小。
figure.setSize(figure.getPreferredSize());
图代表计算它的首选尺寸而不是其布局(如果存在)。
XYLayout将计算最小尺寸以表示内容。
我认为插入此代码的最佳位置是父EditPart的setLayoutConstraint。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。