如何将JLabel放在矩形内

时间:2012-06-28 06:34:58

标签: java swing graphics jlabel paintcomponent

我已经创建了一个矩形,现在我必须将一个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);
    }
}

请给我一些实现此目的的想法。

提前感谢。

3 个答案:

答案 0 :(得分:5)

有很多方法可以达到类似的效果。但是,你不应该真正使用你的方法。当你使用paintComponent进行真正的绘画并且不在其上放置摆动组件时,请使用paintComponent,我相信它更清晰的方法。

您可以使用JLayeredPane,将标签放在一个图层中,将绘图放在另一个图层上。

我会考虑在你的标签中使用Borders - 在这种情况下你可能根本不需要矩形。 请参阅此处的示例:Labels with Borders

希望这有帮助

答案 1 :(得分:1)

将标签绘制到BufferedImage,绘制矩形,然后绘制图像。

答案 2 :(得分:0)

像马克布拉姆尼克所说的那样,有很多不同的方法可以做到这一点,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

祝你好运!