日期:2014-05-20  浏览次数:20816 次

JscrollPanel滚动条问题
java默认的JscrollPanel,当内容区域大于可显示区域时,滑动滚动条,区域也会随之滚动显示,但是我现在不想要这样的效果。

我想要的效果是:A.当拖拽滚动条时,区域不会随之显示滚动。
                B.当拖拽停止时,区域再显示应该显示的部分。

当前我首要的难题是如何将JscrollPanel原来的效果去掉,即A效果。好像应该是把滚动条的那些监听器去掉吧。我不是很熟,请高手指教。多谢!!~~

------解决方案--------------------
说一下我的思路吧,其实你可以做两个滚动条,一个是滚动你当前内容的

一个是滚动空内容的,这两个滚动条的最大值相等,然后让空的覆盖在真实

的上面,那么用户在拉的时候,其实是拉空的,拉完空的后,在事件里根据

当前空的设置有值的滚动条的值就可以了
------解决方案--------------------
ScrollBar 与 JViewport 之间的 event 连接的代码貌似是在 UI 里面实现的,所以这个就暂时不要去想改了。

可以动脑筋的地方就是:

1 - JScrollPane 的 getVerticalScrollBar(), setVerticalScrollBar(JScrollBar) 都是 public 的,所以 ScrollBar 可以有很多办法换成你自己的,水平的bar也一样

2 - JScrollBar 里面, fireAdjustmentValueChanged() 这个方法是 protected ,可以给它重写,利用一个 Timer 和一个 boolean 类型的 flag 来实现延迟的 event 发送,即当 value 停在一个点多少毫秒不变以后才发送event,具体的实现可以参考 JViewport 里面那个延迟300毫秒重绘的实现。