Java 如何将JLabel放入矩形中

Java 如何将JLabel放入矩形中,java,swing,graphics,jlabel,paintcomponent,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 =

我已经创建了一个矩形,现在我必须在其中放入一个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);
    }
}
请给我一些实施这个的想法


提前感谢。

有很多方法可以达到类似的效果。然而,你不应该真正使用你的方法。使用paintComponent进行真正的绘制,不要在其上放置swing组件,我相信这是一种更清晰的方法

可以使用JLayeredPane,将标签放在一个图层上,将图形放在另一个图层上

我也会考虑在你的标签中使用边框——也许在这种情况下你根本不需要矩形。 请参见此处的示例:


希望这有帮助

有很多方法可以达到类似的效果。然而,你不应该真正使用你的方法。使用paintComponent进行真正的绘制,不要在其上放置swing组件,我相信这是一种更清晰的方法

可以使用JLayeredPane,将标签放在一个图层上,将图形放在另一个图层上

我也会考虑在你的标签中使用边框——也许在这种情况下你根本不需要矩形。 请参见此处的示例:


希望这有帮助

正如马克·布拉姆尼克所说,有很多不同的方法可以做到这一点,
paintComponent
是其中之一,但不是最好的。如果您没有在
JPanel
中放入太多组件,您可以使用空布局,同时覆盖
paintComponent
的着色,如下所示:

this.setLayout(null);
//...when you get to adding your JLabel...
this.add(theJLabel);
theJLabel.setBounds(x, y, width, height);
@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();
}
注意,您必须为放入JPanel中的每个组件设置坐标。将更详细地解释空布局

如果必须重写
paintComponent
方法,可以执行以下操作:

this.setLayout(null);
//...when you get to adding your JLabel...
this.add(theJLabel);
theJLabel.setBounds(x, y, width, height);
@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();
}
也许丑陋,但可行(而且,代码没有经过测试,但应该可以工作)

如果您使用的是JDK1.7.0,则更干净的方法可能是


祝你好运

正如马克·布拉姆尼克所说,有很多不同的方法可以做到这一点,
paintComponent
就是其中之一,但不是最好的。如果您没有在
JPanel
中放入太多组件,您可以使用空布局,同时覆盖
paintComponent
的着色,如下所示:

this.setLayout(null);
//...when you get to adding your JLabel...
this.add(theJLabel);
theJLabel.setBounds(x, y, width, height);
@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();
}
注意,您必须为放入JPanel中的每个组件设置坐标。将更详细地解释空布局

如果必须重写
paintComponent
方法,可以执行以下操作:

this.setLayout(null);
//...when you get to adding your JLabel...
this.add(theJLabel);
theJLabel.setBounds(x, y, width, height);
@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();
}
也许丑陋,但可行(而且,代码没有经过测试,但应该可以工作)

如果您使用的是JDK1.7.0,则更干净的方法可能是


祝你好运

将标签绘制为
缓冲图像
,绘制矩形,然后绘制图像。

将标签绘制为
缓冲图像
,绘制矩形,然后是图像。

感谢标记快速回复…但我必须制作类似microsoft visio的矩形,以便用户可以将文本编辑到矩形中。感谢标记快速回复…但我必须制作类似microsoft visio的矩形,以便用户可以将文本编辑到矩形中。