如何有效清除Graphics所绘的图形

时间:2022-09-17 23:20:54
public void update(Graphics g) {
removeAll();
setBackground(Color.orange);
paint(g);
}
removeAll();//可以去除所有的Container对象
但如果是底层的Graphics所绘的图形呢?如何去除?
现在我都是在上面重新画一个背景,再用Graphics进行绘制。
这样一层一层的绘制,一层一层的叠加,之前的东西只不过在新的图形的下面,并不有被去除。

我想问:有没有办法直接将Graphics所绘的图像从Container上去除。

4 个解决方案

#1


Compopent定义了update()方法
它就是这么干的
重新再绘制一遍
但我担心:那些被绘制的对象,会不会给系统带来很大的压力?

#2


需要吗?不需要吧
在屏外画布上,图像的复杂程度和画布大小没有联系,
假如当前界面对应的内存画布是1024×768
那么,你画一条线,它是那么大
你画一幅《蒙娜丽莎》,它还是那么大
拷屏操作总是执行同样的工作,不会是想象中的越来越不堪重负...

当然,大量对象管理会占用客观资源,除非你把所有由句柄graphics绘制的图形
都管理起来,想PS绘图一样,但是既然是自己管理,当然也就知道如何gc()了吧

#3


就是再用Graphics重绘一下,不会造成很大的压力的,但是不要全屏重绘,只要重绘你有图像的地方,这样对系统的负担很小

#4


Compopent.update()

#1


Compopent定义了update()方法
它就是这么干的
重新再绘制一遍
但我担心:那些被绘制的对象,会不会给系统带来很大的压力?

#2


需要吗?不需要吧
在屏外画布上,图像的复杂程度和画布大小没有联系,
假如当前界面对应的内存画布是1024×768
那么,你画一条线,它是那么大
你画一幅《蒙娜丽莎》,它还是那么大
拷屏操作总是执行同样的工作,不会是想象中的越来越不堪重负...

当然,大量对象管理会占用客观资源,除非你把所有由句柄graphics绘制的图形
都管理起来,想PS绘图一样,但是既然是自己管理,当然也就知道如何gc()了吧

#3


就是再用Graphics重绘一下,不会造成很大的压力的,但是不要全屏重绘,只要重绘你有图像的地方,这样对系统的负担很小

#4


Compopent.update()