2

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

这是我的代码

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

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

4

3 回答 3

1

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

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

希望它有效

于 2015-12-29T07:34:43.550 回答
0

Can't you just make a class for the object, for example TextString and Box, and make them have a paint method like so:

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

And then wherever you are drawing the objects, call box.paint(g); or whatever you called your object.

This way you can change the properties of the objects and draw them independently anytime you want without affecting the other objects.

于 2013-06-28T17:21:34.833 回答
0

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

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

于 2015-08-25T16:28:39.790 回答