如何将Label置于RectangleFigure中

时间:2011-09-20 10:07:00

标签: java eclipse-gef draw2d

我是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下添加一些内容......现在我的问题:

  • 有没有办法将图形(Label)置于其父级(RectangleFigure)中,而不像我那样计算位置?
  • 有没有办法在数字上添加“填充”(导致类似于我在标签上设置的尺寸)或“边距”(尺寸自动从其子项和边距计算?
  • 一般来说,是否有更好的方法来实现我想要做的事情?

我在api文档中找不到任何方法,并且一般缺少文档...提前谢谢。

1 个答案:

答案 0 :(得分:3)

  1. 您可以将矩形的布局设置为BorderLayout,然后将Label的约束设置为CENTER。这应该自动处理居中。
  2. 您可以添加MarginBorder来填充数据。
  3. 使用上面的两个答案可能会改善您的代码: - )