Java中用双缓冲技术消除闪烁

Posted 乌云上

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中用双缓冲技术消除闪烁相关的知识,希望对你有一定的参考价值。

在Java编写具有连贯变化的窗口程序时,通常的办法是在子类中覆盖父类的paint(Graphics)方法,在方法中使用GUI函数实现窗口重绘的过程。连贯变换的窗口会不断地调用update(Graphics)函数,该函数自动的调用paint(Graphics)函数。这样就会出现闪烁的情况。

为了解决这一问题,可以应用双缓冲技术。可以通过截取上述过程,覆盖update(Graphics)函数,在内存中创建一个与窗口大小相同的图形,并获得该图形的图形上下文(Graphics),再将图片的图形上下文作为参数调用paint(Graphics)函数(paint(Graphics)中的GUI函数会在图片上画图),再在update(Graphics)函数调用drawImage函数将创建的图形直接画在窗口上。

	/**
	 * 覆盖update方法,截取默认的调用过程
	 */
	public void update(Graphics g) {
		Image buffer = createImage(this.getWidth(), this.getHeight());// 创建图形缓冲区
		Graphics gOff = buffer.getGraphics();// 获取图形缓冲区的图形上下文
		paint(gOff);// 用paint方法中编写的绘图过程对图形缓冲区绘图
		gOff.dispose();// 释放图形上下文资源
		g.drawImage(buffer, 0, 0, this);// 将图形缓冲区绘制到屏幕上
	}

  

以上是关于Java中用双缓冲技术消除闪烁的主要内容,如果未能解决你的问题,请参考以下文章

opengl 单缓冲与双缓冲

13.4-全栈Java笔记:打飞机游戏实战项目|offScreenImage|GameObject|Plane

覆盖javascript以消除闪烁

调整窗口大小时是不是可以完全消除闪烁?

如何消除java动画闪烁

基于c#的双缓冲技术画图