JScrollPaneのオートスクロール

編集者:Terai Atsuhiro
作成日:2004-11-22
更新日:2023-07-15 (土) 22:14:03

概要

JScrollPane上のマウスポインタに応じてラベルをオートスクロールします。

http://terai.xrea.jp/swing/autoscroll/screenshot.png

サンプルコード

final JViewport vport = scroll.getViewport();
scroller = new javax.swing.Timer(5, new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    Rectangle vr = vport.getViewRect();
    int w = vr.width;
    int h = vr.height;
    Point pt = SwingUtilities.convertPoint(vport,0,0,label);
    rect.setRect(pt.x+point.x, pt.y+point.y, w, h);
    label.scrollRectToVisible(rect);
  }
});
vport.addMouseMotionListener(new MouseMotionAdapter() {
  public void mouseMoved(MouseEvent e) {
    scroller.stop();
    Point pt = e.getPoint();
    point.setLocation(SCROLL*(pt.x-startPoint.x), SCROLL*(pt.y-startPoint.y));
    scroller.start();
    startPoint.setLocation(pt);
  }
});

解説

上記のサンプルでは、JViewport内の画像ラベルがマウスポインタの移動方向と距離に応じて自動的にスクロールします。マウスをクリックすると一時停止します。

javax.swing.Timerを使うことでスクロールの開始、継続、停止を行っています。

JTextPaneで文字列を挿入したときに、最後まで自動スクロールしたい場合は、JTextPaneで最終行に移動を参考にしてください。

参考リンク

コメント