如何处理窗口闪烁问题及双缓冲的原理

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

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

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

Image offScreenImage = null;

public void update(Graphics g) {
    if(offScreenImage == null) {
	//创建图形缓冲区
	offScreenImage = this.createImage(this.getWidth(),this.getHeight());
    }
    Graphics gOff = offScreenImage.getGraphics();//湖区图形缓冲区的图形上下文
    paint(gOff);//用paint方法中编写的绘图过程对图形缓冲区绘图
    gOff.dispose();//释放图形上下文资源
    g.drawImage(offScreenImage, 0, 0,  null);//将图形缓冲区绘制到屏幕上
}

       因为大部分的绘图过程是在内存中进行的,所以有效的消除了闪烁,应用了“以空间换取时间”和“功能分块”的思想。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值