为什么我的jscrollpane导致java swing中的奇怪绘制调用?
我有一个例程,在滚动窗格中绘制一个疯狂的大图.在添加到滚动窗格之前,它的绘制太大了 – 库存要求将是几次演出. 由于图形的大小,我在滚动窗格的子项的绘制方法中呈现图表.哪个效果很好,但是我注意到每次移动一个滚动条时我的绘图程序被调用两次 – 一次使用一个裁剪矩形等于未覆盖的区域滚动到,另一次裁剪矩形等于视口的尺寸. 例如,如果我的视口是245×195&我向下滚动3个像素,我的绘图例程被调用g.getClipBounds()设置如下:
…因为我在绘图程序中渲染,这导致闪烁(我尽可能快地进行计算,但是我觉得有点延迟).问题: >有谁知道如何防止第二次油漆电话?这是简单的JScrollPane我正在做的事情 – 我有一个组件,我将它添加到滚动窗格,我将滚动窗格添加到父组件.即使在第一个图像滚动演示@ the swing tutorial中,您也可以看到此行为. 最佳答案
我在.NET世界中遇到过这个问题.双缓冲应该可以解决您的问题.
如果您直接渲染到屏幕上显示的表面上,则无法控制“显示”实际发生的时间.通常发生的事情是:您开始渲染,尚未完成的图像显示在屏幕上,您完成渲染,然后最终显示在屏幕上. 如果您通过清除背景颜色开始渲染逻辑,那么它将显示为闪光灯.双缓冲可以防止这种情况,因为它始终从完成的渲染中显示.可能发生的最糟糕的事情是轻微的“撕裂”,但这在快速改变动画时才会引起注意. 即使您只想渲染巨大图像的一部分,您仍然可以使用此技术.只需将您需要的内容渲染到离屏表面(这是您想要的可见部分的大小).然后,当您完成后,将整个图像一下子绘制到显示器表面上. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |