Swing/AutoScroll のバックアップ(No.15)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/AutoScroll へ行く。
- 1 (2004-11-22 (月) 01:00:20)
- 2 (2005-02-03 (木) 02:03:49)
- 3 (2005-02-04 (金) 09:39:40)
- 4 (2005-04-28 (木) 04:33:03)
- 5 (2005-05-31 (火) 07:39:18)
- 6 (2005-09-22 (木) 21:57:05)
- 7 (2005-10-06 (木) 10:43:59)
- 8 (2006-02-05 (日) 04:36:32)
- 9 (2006-02-27 (月) 15:26:18)
- 10 (2006-04-12 (水) 19:33:18)
- 11 (2007-05-24 (木) 19:15:50)
- 12 (2008-01-25 (金) 16:19:46)
- 13 (2010-12-12 (日) 23:21:50)
- 14 (2011-03-20 (日) 16:59:32)
- 15 (2011-12-22 (木) 18:36:14)
- 16 (2011-12-31 (土) 02:11:57)
- 17 (2013-04-14 (日) 00:29:20)
- 18 (2014-02-17 (月) 18:33:03)
- 19 (2014-04-08 (火) 19:17:40)
- 20 (2014-06-27 (金) 15:49:06)
- 21 (2014-10-31 (金) 01:48:55)
- 22 (2014-11-28 (金) 16:07:30)
- 23 (2015-02-17 (火) 22:26:26)
- 24 (2016-09-02 (金) 12:32:40)
- 25 (2017-10-12 (木) 13:36:31)
- 26 (2018-02-24 (土) 19:51:30)
- 27 (2019-04-04 (木) 14:28:34)
- 28 (2021-01-13 (水) 17:59:02)
- 29 (2023-07-15 (土) 22:14:03)
TITLE:JScrollPaneのオートスクロール
Posted by aterai at 2004-11-22
JScrollPaneのオートスクロール
JScrollPane上でのマウスドラッグに応じてラベルをオートスクロールします。
- &jnlp;
- &jar;
- &zip;
サンプルコード
class DragMoverListener extends MouseInputAdapter implements ActionListener {
private static final int SPEED = 2;
private final Cursor dc;
private final Cursor hc = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
private final Rectangle rect = new Rectangle();
private final javax.swing.Timer scroller;
private final JComponent label;
private final JViewport vport;
private Point startPt = new Point();
private Point move = new Point();
public DragMoverListener(JViewport vport, JComponent comp) {
this.vport = vport;
this.label = comp;
this.dc = label.getCursor();
this.scroller = new javax.swing.Timer(5, this);
vport.addMouseMotionListener(this);
vport.addMouseListener(this);
}
@Override public void actionPerformed(ActionEvent e) {
Rectangle vr = vport.getViewRect();
int w = vr.width;
int h = vr.height;
Point ptZero = SwingUtilities.convertPoint(vport,0,0,label);
rect.setRect(ptZero.x-move.x, ptZero.y-move.y, w, h);
label.scrollRectToVisible(rect);
}
@Override public void mouseDragged(MouseEvent e) {
scroller.stop();
Point pt = e.getPoint();
move.setLocation(SPEED*(pt.x-startPt.x), SPEED*(pt.y-startPt.y));
startPt.setLocation(pt);
scroller.start();
}
@Override public void mousePressed(MouseEvent e) {
label.setCursor(hc);
startPt.setLocation(e.getPoint());
scroller.stop();
}
@Override public void mouseReleased(MouseEvent e) {
label.setCursor(dc);
}
@Override public void mouseExited(MouseEvent e) {
label.setCursor(dc);
move.setLocation(0, 0);
scroller.stop();
}
}
解説
上記のサンプルでは、JViewport内の画像ラベルをマウスでドラッグすると、その移動方向に応じて自動的にスクロールします。マウスをクリックすると停止します。
javax.swing.Timerを使うことでスクロールの開始、継続、停止を行っています。
JTextPaneで文字列を挿入したときに、最後まで自動スクロールしたい場合は、JTextPaneで最終行に移動を参考にしてください。
参考リンク
コメント
- 猫の手スクロール風の動作に変更しました。 -- aterai