gpt4 book ai didi

java - 为什么在删除容器的绝对大小时没有绘制 GEF 子项?

转载 作者:行者123 更新时间:2023-12-01 05:44:45 27 4
gpt4 key购买 nike

我尝试获得一个简单的 GEF 编辑器。我有一个 GraphicalEditorWithPalette 来创建我的示例模型。我有一个覆盖 createFiguregetModelChildrenRootEditPart,如下所示:

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 ...
}

这按预期工作。但我不想让容器有固定的大小。相反,我尝试让容器的大小适应 children 的需要。如果我删除 figure.setSize(1000, 1000); 则不再绘制子项。我的错误是什么?

编辑:也许重要的是要知道我的编辑器像这样配置根编辑部分:viewer.setRootEditPart(new ScalableFreeformRootEditPart());

编辑2:看起来实际上调用 viewer.setRootEditPart(new ScalableFreeformRootEditPart()); 是问题所在。如果我删除它,它将按预期工作。目前我不完全明白为什么......如果有人能解释一下那就太好了。

最佳答案

您必须在需要时手动设置 parent 身材的大小。

figure.setSize(figure.getPreferredSize());

图形代表计算其首选大小而不是其布局(如果存在)。XYLayout 将计算表示内容的最小尺寸。

我认为插入此代码的最佳位置是父 EditPart 的 setLayoutConstraint。

关于java - 为什么在删除容器的绝对大小时没有绘制 GEF 子项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6197994/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com