具体来说,我想将JLabel的内容绘制到Graphics对象上。 我不想将标签添加到任何框架或面板!请查看评论以获得进一步的解释。
经过一番研究,我发现了一种方法。例如,我有一个标签,我绘制到x = 100,y = 100。
public void drawIt(Graphics graphics)
{
Dimension size = label.getPreferredSize();
BufferedImage image = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_ARGB);
Graphics imageGraphics = image.createGraphics();
label.paint(imageGraphics);
graphics.drawImage(image, 100, 100, null);
imageGraphics.dispose();
}
这很好,但有一个主要的反向: 当我在paint方法(在任何JFrame或JPanel等)中调用它时,它非常慢并且使用大量内存。 Afaik,通常要避免在paint方法中分配(图像)对象。
调用
label.paint(graphics);
工作得很好,但是调用这个方法总是在坐标0,0处绘制标签,我无法通过setLocation等来影响它。
答案 0 :(得分:0)
好的,我找到了一种方法来实现我想要的结果。
由于
label.paint(graphics);
不接受x和y参数,另一种方法(将其绘制到新的BufferedImage并绘制它)效率不高,可以调用Graphics#translate(x,y)来改变Graphics对象的原点。
E.g。要将我的标签绘制为100,100,这就完成了工作:
graphics.translate(100, 100);
label.paint(graphics);
graphics.translate(-100, -100); //set origin back to 0, 0 for following calls
当然这适用于所有其他组件。