2012-06-28 83 views
0

我已經創建了一個矩形,現在我必須將一個JLabel放入此矩形中。所以如何將JLabel放在矩形內。如何將JLabel放在矩形內

代碼在這裏: -

public class ColoredRect extends JPanel 
{ 

    private double x, y, width, height; 

    public ColoredRect(double x,double y) 
    { 
      this.x = x; 
      this.y = y; 
      width = 100; 
      height =40; 
      rect = new Rectangle2D.Double(this.x , this.y,width,height); 
    } 
    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     Graphics2D g2 = (Graphics2D) g; 
     g2.setColor(Color.cyan); 
     g2.fill(rect); 
    } 
} 

,請給我一些想法實現這一點。

在此先感謝。

回答

5

有很多方法可以達到類似的結果。但是,你不應該真的使用你的方法。在使用paintComponent的時候使用paintComponent來繪製真實顏色,並且不要在其上放置擺動組件,我相信它更加清晰。

您可以使用JLayeredPane,並將您的標籤放在一個圖層中,並將您的圖紙放在另一個圖層上。

我會考慮在你的標籤中使用邊框 - 也許在這種情況下你根本不需要矩形。 看到這裏的例子:Labels with Borders

希望這有助於

+0

感謝馬克的快速回復......但我必須使長方形像微軟visio所以用戶可以編輯文本到矩形。 – user591790

0

像馬克Bramnik說,有一堆不同的方式做到這一點,paintComponent是其中之一,但不是最好的。如果你不把太多的組件集成到您的JPanel你可以使用一個空的佈局,而重寫paintComponent您的着色是這樣的:

this.setLayout(null); 
//...when you get to adding your JLabel... 
this.add(theJLabel); 
theJLabel.setBounds(x, y, width, height); 

當心,你必須設置你把每個組件的座標JPanel的。更詳細地解釋空佈局here

如果你必須重寫paintComponent方法,你可以做這樣的事情:

@Override 
protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    Graphics g2 = g.create(); 
    theJLabel.setPreferredSize(new Dimension(width, height)); 
    g2.translate(x, y); 
    theJLabel.paint(g2); 
    g2.dispose(); 
} 

也許醜陋,但可行的(也,代碼沒有經過測試,但應工作)。

更清潔的方式可能是JLayeredPane或者如果您使用JDK 1.7.0 JLayer

祝你好運!

1

將標籤繪製到BufferedImage,繪製矩形,然後繪製圖像。