Java:如何复制图形对象并重用它?

时间:2013-06-28 08:00:59

标签: java swing graphics paint graphics2d

我认为图形对象的create()函数会创建当前图形对象的新副本

这是我的代码

Graphics temp;
temp = g.create();
temp.drawString("hello world",100,100);
g.fillRect(200,200,50,50);

现在我的理解是,因为temp现在是g的副本,所以temp的任何变化都不会反映在g上。因此,由于fillRect函数,我的输出应该只是一个矩形。但是我在绘画输出上得到了字符串和矩形。为什么会发生这种情况以及如何阻止它?

3 个答案:

答案 0 :(得分:1)

我是java的初学者,但是,在查看你的代码后,我看到你已经放了 g.create(); (我不太确定但是)这可能意味着一切都用g声明。会受到影响。我建议这样做:

Grapics2D g2d = (Graphics2D) g;
Graphics temp;
temp = g2d.create();
temp.drawString("hello world",100,100);
g.fillRect(200,200,50,50);

希望它有效

答案 1 :(得分:0)

你不能只为对象创建一个类,例如TextString和Box,并使它们具有类似的绘制方法:

public void paint(Graphics g){
    g.setColor(Color.RED);
    g.fillRect(50, 50, 100, 100);
}

然后无论你在哪里绘制物体,都要打电话     box.paint(克);或者你称之为对象的任何东西。

通过这种方式,您可以随时更改对象的属性并单独绘制它们,而不会影响其他对象。

答案 2 :(得分:0)

Graphics.create为您提供生成它的Graphics对象的完整或指定部分 - 它不是新的Graphics对象。

如果您希望绘制图形对象(并重用所述对象),我建议使用BufferedImage衍生物OffscreenImage,并从那里绘制到OffscreenImage.getGraphics