我认为图形对象的create()函数会创建当前图形对象的新副本
这是我的代码
Graphics temp;
temp = g.create();
temp.drawString("hello world",100,100);
g.fillRect(200,200,50,50);
现在我的理解是,因为temp现在是g的副本,所以temp的任何变化都不会反映在g上。因此,由于fillRect函数,我的输出应该只是一个矩形。但是我在绘画输出上得到了字符串和矩形。为什么会发生这种情况以及如何阻止它?
答案 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