为什么在移除容器的绝对尺寸时不会绘制GEF儿童?

时间:2011-06-01 07:58:57

标签: java eclipse-gef

我尝试使用简单的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 个答案:

答案 0 :(得分:0)

您必须在需要时手动设置父图的大小。

figure.setSize(figure.getPreferredSize());

图代表计算它更喜欢它的布局(如果存在)。 XYLayout将计算最小尺寸以表示内容。

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