1

我尝试获得一个简单的工作 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());是问题所在。如果我删除它,它会按预期工作。目前我不完全理解为什么......如果有人能解释一下会很棒。

4

1 回答 1

0

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

figure.setSize(figure.getPreferredSize());

数字代表计算它的大小而不是它的布局(如果存在)。XYLayout 将计算最小尺寸来表示内容。

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

于 2011-06-02T11:08:46.643 回答