读书人

哪位高手有解决Canvas闪烁的经验

发布时间: 2013-11-18 11:57:15 作者: rapoo

谁有解决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直接覆盖掉上次的内容

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

读书人网 >J2SE开发

热点推荐