有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我试图得到一个简单的工作环境基金编辑器。我有一个GraphicalEditorWithPalette来创建我的示例模型。我有一个RootEditPart覆盖createFiguregetModelChildren如下:

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) 个答案

  1. # 1 楼答案

    当需要时,你必须手动设置父母的体型大小

    figure.setSize(figure.getPreferredSize());
    

    figure代表计算它的首选大小而不是布局(如果存在)。 XYLayout将计算表示内容的最小大小

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