0

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

请给我一些想法来实现这一点。

提前致谢。

4

3 回答 3

5

有很多方法可以达到类似的结果。但是,您不应该真正使用您的方法。使用paintComponent 来真正绘制,不要在其上放置swing 组件,我相信它更清晰的方法。

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

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

希望这可以帮助

于 2012-06-28T06:39:59.513 回答
1

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

于 2012-06-29T06:26:34.983 回答
0

就像 Mark Bramnik 所说,有很多不同的方法可以做到这一点,paintComponent是一种,但不是最好的。如果您没有将太多组件放入您的组件JPanel中,则可以使用空布局,同时覆盖paintComponent您的着色,如下所示:

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

请注意,您必须为放置在 JPanel 中的每个组件设置坐标。此处更详细地解释了空布局。

如果您必须重写该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

祝你好运!

于 2012-06-28T08:36:05.527 回答