我已经创建了一个矩形,现在我必须将一个 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,就像你用它来真正绘画并且不要在上面放置摆动组件一样,我相信它的方法更清晰。
您可以使用 JLayeredPane,将标签放在一个图层中,将绘图放在另一个图层上。
我也会考虑在您的标签中使用边框 - 在这种情况下,也许您根本不需要矩形。请参阅此处的示例:带边框的标签
希望这有帮助
将标签绘制到BufferedImage
,绘制矩形,然后绘制图像。
就像马克·布拉姆尼克(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。
祝你好运!