Java Swing使用双缓冲技术(两种)
开发工具与关键技术:java、 elipse2019、jdk1.8
作者:Amewin
撰写时间:2019年8月7日
Swing编程简介:
介绍当使用Swing 进行图形绘制时,只是单独绘制一个静图片时,只需要考虑图片的美化程度,让图形尽量保持圆润就可以满足我们的基本需求。但是更多时候,我们处理的是一些关于数据可视化的动图效果
会遇到图片闪烁,远远达不到我们的观感体验,可以使用双缓存技术解决,其实双缓存也是计算机图形学,最基础的课题之一。
下面我以简单的动图,展示一下产生其图片产生闪烁的原理。
优点:
1、Swing组建不再依赖本地平台GUI无需采用各种平台的GUI交集,因此Swing提供大量图形界面组件
2、Swing组建不再依赖本地GUI不会产生平台相关bug
3、Swing组件在各种平台上运行可以保证具有相同的图形界面外观
4、Swing采用MVC(model-view-controller,模型-视图-控制器)设计模式,模型用于维护组件的状态,视图是组件的可视化表现,控制器用于控制各个事件,组件做出怎么样的响应。模型发生改变,它通知所有依赖它的视图,视图根据模型数据来更新自己。
必须对画布进行清空 ,可问题来了只有一张画布,清除之后再进行绘画 ,屏幕就会出现一闪的效果。
而双缓存却有两张画布,就像让人走独木桥,双脚交替前行,始终保持平稳的速度。双缓存也是交替切换图片前行,因此他只需要变换切换好已经处理好后的图片地址,而不需要在画布展示绘制的过程。
使得人观感更加自由,柔和。
下面简要的代码,启动Swing 中双缓存功能
import java.awt.*;
import javax.swing.*;
import java.awt.geom.Ellipse2D;
public class AlgoFrame extends JFrame{
//画板
private class AlgoCanvas extends JPanel{
//启用双缓存--进行页面的基本优化·
public AlgoCanvas(){super(true); }
}
}
//而第二种:
//则较为复杂一些
//双缓存工具类
public void update(Graphics g) {
if(offScreenImage == null)
//这是游戏窗口的宽度和高度
offScreenImage = this.createImage(Constant.GAME_WIDTH,Constant.GAME_HEIGHT);
Graphics gOff = offScreenImage.getGraphics();
paint(gOff);
g.drawImage(offScreenImage, 0, 0, null);
}
示例