public void update(Graphics g) {
removeAll();
setBackground(Color.orange);
paint(g);
}
removeAll();//可以去除所有的Container对象
但如果是底层的Graphics所绘的图形呢?如何去除?
现在我都是在上面重新画一个背景,再用Graphics进行绘制。
这样一层一层的绘制,一层一层的叠加,之前的东西只不过在新的图形的下面,并不有被去除。我想问:有没有办法直接将Graphics所绘的图像从Container上去除。

解决方案 »

  1.   

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

  2.   

    需要吗?不需要吧
    在屏外画布上,图像的复杂程度和画布大小没有联系,
    假如当前界面对应的内存画布是1024×768
    那么,你画一条线,它是那么大
    你画一幅《蒙娜丽莎》,它还是那么大
    拷屏操作总是执行同样的工作,不会是想象中的越来越不堪重负...当然,大量对象管理会占用客观资源,除非你把所有由句柄graphics绘制的图形
    都管理起来,想PS绘图一样,但是既然是自己管理,当然也就知道如何gc()了吧
      

  3.   

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