日期:2014-05-20  浏览次数:20756 次

谁有解决Canvas闪烁的经验?
各位是不是大多采用Swing,不过偶还是熟悉AWT:

public class MyCanvas extends Canvas implements Observer,MouseListener

为了解决闪烁问题,paint方法是这样的:

public void paint(Graphics h)
   {Rectangle r=getBounds(); 
    Image db=createImage(r.width,r.height);
    Graphics g=db.getGraphics();
    
    //通过g来画
    g.setColor(Color.green.darker().darker()); 
    g.fillRect(0,0,r.width,r.height);

    h.drawImage(db,0,0,this); 
   }

还有:  public void update(Graphics g) {paint(g);}

偶的程序中就是这样编的,但有时还是有闪烁
偶只剩最后一招了:在update方法中改成repaint(x,y,width,height) 
但这样会增加程序的复杂度
偶发现把mouseClicked方法中的代码移到mousePressed方法后
闪烁有所减少,但也没有完全消除

这是不是JVM的问题?





------解决方案--------------------
建议采用双缓冲技术。去网上查找。
------解决方案--------------------
http://www.iteye.com/topic/624169
------解决方案--------------------
其实 闪烁就是 因为先画了一遍底色引起的

 g.setColor(Color.green.darker().darker()); 
    g.fillRect(0,0,r.width,r.height);
所以要么就用image直接覆盖掉上次的内容

要么就只能用双缓存,不要让画底色的行为直接显示出来。