【发布时间】:2010-10-08 16:17:14
【问题描述】:
我有一个例程,可以在滚动窗格内绘制一个非常大的图形。在添加到滚动窗格之前,它太大了,无法绘制 - 内存要求将是几场演出。
由于图表的大小,我在滚动窗格子项的绘制方法中渲染图表。效果很好,但是我注意到每次移动滚动条时,我的绘制例程都会被调用两次——一次是剪切矩形等于滚动到的未覆盖区域,第二次是剪切矩形等于视口的尺寸.
例如,如果我的视口是 245x195 并且我向下滚动 3 个像素,我的绘制例程将调用 g.getClipBounds(),设置如下:
java.awt.Rectangle[x=0,y=195,width=245,height=3]
java.awt.Rectangle[x=0,y=3,width=245,height=195]
...因为我在绘制例程中渲染这会导致闪烁(我尽可能快地进行计算,但我猜会有一点延迟)。问题:
有谁知道如何防止第二次绘制调用?这是我在这里做的简单的 JScrollPane 东西 - 我有一个组件,我将它添加到滚动窗格中,我将滚动窗格添加到父组件。即使在第一个图像滚动演示 @the swing tutorial 中,您也可以看到这种行为。
如果 #1 的答案是“不”:谁能想出一个好的方法来处理这个问题?我应该在某种图像缓冲区中绘制,跟踪最近的绘制调用并尽可能复制图像?我无法想象这比重新渲染要快得多,但任何见解都值得赞赏:-)
【问题讨论】:
标签: java swing graphics jscrollpane