せっかちさんを満足させるスクロールの速いペインを作りたい,の巻
2001.02.25 新規
例えば、幅の広いパネルやログを表示させるようなテキスト・エリアでは
なんていう感じで、JScrollPane クラスを使います。getContentPane().add(new JScrollPane(routePanel),BorderLayout.CENTER); JScrollPane sc=new JScrollPane(textArea ,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS ,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); getContentPane().add(sc,BorderLayout.SOUTH);
この JScrollPane クラス、スクロール・バーを常に表示させたり必要なときだけ表示させたりと非常に便利。 何より勝手に管理してくれているので、ホントに楽チン。
ただ、こんなに使い勝手の良いクラスにも、1つだけ使っているうちに我慢できなくなる問題があります。 それが、スクロールの遅さ。
スクロール・バー内にあるバーを直接ドラッグしたり、バーのないトコでクリックしてバーを移動させたときは、問題のない快適なスクロールを得られます。
ただしスクロール・バー上下にある「▲」ボタンや「▼」ボタンを使用した場合には、「さっきまでの快適さはドコに?」というようなノロマなスクロールになってしまいます。
まぁ、使わなければ良いと言ってしまえばソコまでですが、せっかく付いているボタンです。
なんとかして、快適なスクロールを提供してくれるように変更してみましょう。
ボタンでのスクロールが快適と思えないのは、1回にスクロールする移動量が問題となってます。
と、そこまでわかったのなら、解決まではスグです。
その1回分の移動量を設定しなおすことで、スクロール幅が大きくなり、快適と思える挙動になります。
スクロール・バーの設定は、当然 JScrollPane クラスでは扱えません。
なので、JScrollPane#getVerticalScrollBar() メソッドを用いて保持している JScrollBar クラスを取り出します。
上記のように JScrollBar#setUnitIncrement() メソッドで移動量(増加量)を設定することで、期待している動作が得られます。sc.getVerticalScrollBar().setUnitIncrement(10);
なお、JScrollPane クラスは縦と横で違うスクロール・バーを保持しています。 先の例は縦スクロール・バーの場合なので、横スクロール・バーの挙動を変えるときには JScrollPane#getHorizontalScrollBar() メソッドを使用します。