如何在拖动 jscrollbar 句柄时正确更改窗格内容

How to properly change pane content while dragging a jscrollbar handle

我有一个包含图像内容的窗格,该窗格在 滚动期间发生变化。内容通过滚轮事件正确更新,因为我实现了一个滚轮侦听器,它在设置新的滚动值之前重新绘制图像。

但是,当用户用鼠标拖动滚动条手柄时,在手动拖动滚动期间图像内容没有更新。所以我实现了一个计时器,它获取当前滚动值并在给定新滚动位置的情况下重新绘制内容。

然而,此解决方案(尽管有 10 毫秒的调整)会导致滚动体验跳动。图像移动(没有必要的图像调整),然后每 10 毫秒在事后进行校正。

我本来试过adjustmentlistener,但是它是在handle被释放后才得到事件。在滚动条机械开始简单地移动我的内容之前,如何在 jscrollbar 句柄拖动期间实时更新窗格内容,就好像它是静态图像一样?每次它尝试重绘内容时,我能否以某种方式向滚动条机制提供内容已更改或其他内容的线索?或者我可以禁用滚动条移动图像的能力,而只依靠我的计时器来做吗?

我建议你在JScrollBar的模型中添加一个ChangeListener,一个BounderedRangeModel,然后根据模型的值以及它的最大值和最小值,改变你的图像。如果要交换图像,最简单的方法是交换 JLabel 的 ImageIcon。