2011-09-20 107 views
1

我是一個用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); 
    } 
} 

我的類擴展圖,而不是RectangleFigure,因爲我想在以後添加ToolbarLayout,添加RectangleFigure +標籤下面的東西......現在我的問題:

  • 有沒有什麼辦法可以在父母(RectangleFigure)裏面放置一個圖形(標籤)而不用像我那樣計算位置?
  • 有沒有辦法給數字添加「填充」(導致類似於我在標籤上設置的大小)或「邊距」(大小是從其子元素和邊距自動計算的大小)
  • 是否存在,更好的方式來實現我想要做什麼?

我找不到在API文檔的任何方法,並有一些普遍缺乏的文檔...謝謝你在前進。

回答

3
  1. 您可以將矩形的佈局設置爲BorderLayout,然後設置標籤的約束到CENTER。這應該自動處理居中。
  2. 您可以添加MarginBorder來填充您的數字。
  3. 使用兩個以上的答案可能會提高你的代碼:-)
+0

MarginBorder幫我添加填充。 BorderLayout將Label的約束設置爲CENTER並沒有奏效,所以我仍然在我的問題中使用「手動」標籤居中代碼......幾個月後(回顧我的問題)非常感謝您的回答! – roirodriguez

+0

您是否將父級的佈局設置爲BorderLayout?應該工作。無論如何,如果你喜歡答案,爲什麼不把它標記爲正確? – vainolo