我在collection
课程中有这个循环repaint()
JPanel持续
while(loop) {
imageicon = (ImageIcon) ois.readObject();
image = imageicon.getImage();
cjpanel.tempimage = image;
cjpanel.repaint();
Thread.sleep(100);
}
和cjpanel
扩展了我已覆盖paintComponent()
的JPanel,我正在使用Double buffering
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
tempimage.getScaledInstance(dim.width, dim.height, Image.SCALE_FAST);
bufferGraphics.clearRect(0,0,dim.width,dim.width);
bufferGraphics.drawImage(tempimage,0,0,dim.width,dim.height, null);
g.drawImage(offscreen,0,0,this);
}
我的问题是repaint
在循环时总是落后两帧。即如果image 4
位于while
循环中,则paintComponent()
正在绘制`图像2。
那么我怎样才能在repaint
完成之前加快repaint
或停止新的repaint
?
更新
当我从ObjectInputStream更改图像的大小时,它工作正常。我认为它必须对图像大小做些什么..
答案 0 :(得分:2)
答案 1 :(得分:2)
重绘管理器可以将顺序调用折叠到repaint
,这样如果为每个图像绘制一帧,则某些图像可能不会显示。您可以使用paintImmediately
强制重绘:
立即绘制此组件中指定区域及其与区域重叠的所有后代。
很少需要调用此方法。在大多数情况下,调用重绘效率更高,这会延迟实际绘制并将冗余请求折叠为单个绘制调用。如果在调度当前事件时需要更新显示,则此方法很有用。
至于
当我从ObjectInputStream改变图像的大小时,它工作正常。
它可能会影响重绘管理器计算如何/哪个重绘调用崩溃。
我建议您尝试使用此方法,看看它是否有效,但实现起来比较困难(仔细阅读API)。
感谢this post更新我的记忆。