我有一个例程,在滚动窗格中绘制一个疯狂的大图.在添加到滚动窗格之前,它的绘制太大了 – 库存要求将是几次演出.
由于图形的大小,我在滚动窗格的子项的绘制方法中呈现图表.哪个效果很好,但是我注意到每次移动一个滚动条时我的绘图程序被调用两次 – 一次使用一个裁剪矩形等于未覆盖的区域滚动到,另一次裁剪矩形等于视口的尺寸.
例如,如果我的视口是245×195&我向下滚动3个像素,我的绘图例程被调用g.getClipBounds()设置如下:
java.awt.Rectangle[x=0,y=195,width=245,height=3]
java.awt.Rectangle[x=0,y=3,height=195]
…因为我在绘图程序中渲染,这导致闪烁(我尽可能快地进行计算,但是我觉得有点延迟).问题:
>有谁知道如何防止第二次油漆电话?这是简单的JScrollPane我正在做的事情 – 我有一个组件,我将它添加到滚动窗格,我将滚动窗格添加到父组件.即使在第一个图像滚动演示@ the swing tutorial中,您也可以看到此行为.
>如果对#1的回答是’不’,那么有人能想出一个很好的方法来解决这个问题吗?我应该绘制某种图像缓冲区,跟踪最近的油漆调用&尽可能复制图像?我无法想象这比重新渲染要快得多,但任何洞察力都值得赞赏:-)
最佳答案