g如何用双缓冲解决java swing图像移动闪烁

2025-05-21 05:46:52
推荐回答(1个)
回答1:

双缓存:缓存区是绘图绘图时使用的屏外内存区。使用双缓存不是直接绘制屏幕,而是绘制到后缓存区,然后将整个缓存区复制到屏幕上,这样就可以同时更新整个屏幕,游戏者只看到要看到的东西了。后缓存区可能只是普通java图像。可以用Component类的createImage(int w,int h)方法生成后缓存区,如果是不使用活动绘制的小程序使用双缓存,则可以覆盖update()方法,改用双缓存,并用双缓存的图形描述表调用paint()方法,实现代码如下:

private Image doubleBuffer;
public void update(Graphics g){
Dimension size=getSize();
if(doubleBuffer.getWidth(this)!=size.width||doubleBuffer.getHeight(this)!=size.height)
{ doubleBuffer=createImage(size.width,size.height);
}
if(doubleBuffer!=null){
//绘制到双缓存区
Graphics g2=doubleBuffer.getGraphics();
paint(g2);
g2.dispose();
//将双缓存复制到屏幕
g.drawImage(doubleBuffer,0,0,null);
}
else
{//不要双缓存,只绘制屏幕
paint(g);
}
}
public void paint(Graphics g){
//在此绘图
}