「java双重缓冲」Java双缓冲

博主:adminadmin 2022-11-28 07:03:06 63

今天给各位分享java双重缓冲的知识,其中也会对Java双缓冲进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

关于java中利用BufferedImage的双缓冲技术

双缓冲就是先在内存中的另一张“画布”上进行多次绘图,然后把画好的图在一次性画到屏幕上,也就是最后一步的g.drawimage。简单的说,一个graphics对应着自己的绘图区域图形上下文

java双缓冲问题!!

paint()方法中其实并未实现双缓冲,双缓冲是在后台虚拟的Image中绘制完成后再返回当前窗口,而这个代码直接调用g进行两次drawImage,其实就是直接对当前窗口进行绘制,有覆盖区域,会产生闪烁,,按照下列修改paint()方法就可以了

public void paint(Graphics g) {

g1.setColor(this.getBackground());

g1.fillRect(0,0,202,154);

g1.drawImage(age1,0,0,200,150,i,96,96,i,this);

g1.drawImage(age,0,0,200,150,0,0,200,150,this);

g.drawImage(x,0,0,this); //把x图像返回到当前窗口

}

java 双缓冲问题

应该把双缓冲放在update方法里面的

调用情况是repaint() - update(Graphics g) - paint(Graphics g)

具体方法如下

public void update(Graphics g){

Graphics bufferg;

if(bufferPage==null){

buffer=createImage(350,350);

}

bufferg=bufferPage.getGraphics();

Color c = bufferg.getColor();

bufferg.setColor(getBackground());

bufferg.fillRect(0,0, this.getSize().width, this.getSize().height);

bufferg.drawImage(img, x,y,this);

paint(bufferg);

g.drawImage(bufferPage,0,0,this);

bufferg.setColor(c);

}

public void paint(Graphics g){

g.drawImage(img,0,0,this);

}

java的Swing组件本身具有双缓冲功能,那么,用什么方法调用这个双缓冲呢?

任何在paint(Graphics) 方法外用getGraphics()试图获取画笔的方法都是不可取的

就算你可以暂时的获取到,也会因为屏幕刷新而把你画的内容冲掉

记住,paint是一个回调函数(又称钩子函数),系统会在需要绘制的时候调用paint,只有挂在系统的钩子上才能运行

举个例子,swing的事件监听就是一种钩子函数的例子,只有addListener来挂钩,系统就会触发

windows有14种钩子

试想,windows每隔一段时间都去调用组件的paint来绘制组件(屏幕刷新),此时,你在另外的方法里面用了paint,那岂不是windows一调用组件自己的paint(Graphics) 就把你的paint刷掉了...

java双重缓冲的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于Java双缓冲、java双重缓冲的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-28,除非注明,否则均为首码项目网原创文章,转载请注明出处。