Как центрировать метку внутри RectangleFigure - PullRequest
1 голос
/ 20 сентября 2011

Я полный новичок с draw2d, я пытаюсь сделать несколько примеров, чтобы научиться его использовать ... Я пытаюсь написать рисунок, который показывает метку с белым фоном, некоторые отступы, и вмещающий серый фон. Для этого я написал следующее:

public class MyFigure extends Figure {

    private Label label;
    private RectangleFigure rectangle;

    public MyFigure() {
        rectangle = new RectangleFigure();
        rectangle.setBackgroundColor(ColorConstants.gray);

        label = new Label("Test label");    
        label.setFont(new Font(null, "Arial", 12, SWT.BOLD));
        label.setTextAlignment(PositionConstants.CENTER);
        label.setBackgroundColor(ColorConstants.white);
        label.setForegroundColor(ColorConstants.black);
        label.setOpaque(true);

        rectangle.add(label);
        this.add(rectangle);
    }

    protected void paintFigure(Graphics graphics) {
        // Add padding to the label
        label.setSize(label.getTextBounds().resize(35, 10).getSize());
        // Set rectangle size, with some margin around the label
        Dimension d = label.getSize().expand(40, 10);
        rectangle.setSize(d);
        // Center the label inside the rectangle
        label.setLocation(rectangle.getLocation().translate(20, 5));

        // Finally, set this figure's bounds
        this.setBounds(rectangle.getBounds());

        super.paintFigure(graphics);
    }
}

Мой класс расширяет Figure вместо RectangleFigure, потому что я хочу добавить ToolbarLayout позже, чтобы добавить вещи под RectangleFigure + Label ... Теперь мои вопросы:

  • Есть ли способ центрировать фигуру (метку) внутри ее родителя (RectangleFigure), не вычисляя позицию, как я?
  • Есть ли способ добавить «отступы» к рисункам (в результате чего-то вроде размера, который я установил на ярлыке) или «поля» (размер, рассчитываемый автоматически из его дочерних элементов и поля?
  • Есть ли вообще лучший способ реализовать то, что я пытаюсь сделать?

Я не могу найти какой-либо метод в api docs, и вообще не хватает документации ... Заранее спасибо.

1 Ответ

3 голосов
/ 20 сентября 2011
  1. Вы можете установить макет прямоугольника на BorderLayout, а затем установить ограничение метки на CENTER. Это должно обработать центрирование автоматически.
  2. Вы можете добавить MarginBorder, чтобы дополнить свои цифры.
  3. Использование двух ответов выше, вероятно, улучшит ваш код: -)
...