Почему дочерние элементы GEF не отображаются при удалении абсолютного размера контейнера? - PullRequest
1 голос
/ 01 июня 2011

Я пытаюсь получить простой рабочий редактор GEF. У меня есть GraphicalEditorWithPalette, который создает мой пример модели. У меня есть 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 ...
}

Это работает как ожидалось. Но я не хочу иметь фиксированный размер для контейнера. Вместо этого я пытаюсь добиться того, чтобы размер контейнера соответствовал детям. Если я уберу figure.setSize(1000, 1000);, дети больше не будут рисоваться. В чем моя ошибка?

Edit: Может быть, важно знать, что мой редактор настраивает часть редактирования корня следующим образом: viewer.setRootEditPart(new ScalableFreeformRootEditPart());

Edit2: Похоже, что на самом деле проблема viewer.setRootEditPart(new ScalableFreeformRootEditPart());. Если я удаляю это, это работает как ожидалось В настоящее время я не до конца понимаю, почему ... было бы замечательно, если бы кто-то мог объяснить.

1 Ответ

0 голосов
/ 02 июня 2011

Вы должны установить размер родительской фигуры вручную, когда это необходимо.

figure.setSize(figure.getPreferredSize());

фигура делегирует вычисления, которые она предпочитает по размеру своему макету (если существует).XYLayout вычислит минимальный размер для представления содержимого.

Я думаю, что лучшим местом для вставки этого кода является setLayoutConstraint родительского EditPart.

...