「java双重缓冲」Java双缓冲
今天给各位分享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双重缓冲的信息别忘了在本站进行查找喔。
发布于:2022-11-28,除非注明,否则均为
原创文章,转载请注明出处。