Swing/HandScroll のバックアップ(No.13)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/HandScroll へ行く。
- 1 (2006-05-11 (木) 15:08:19)
- 2 (2007-05-24 (木) 19:23:47)
- 3 (2007-07-05 (木) 18:18:22)
- 4 (2008-01-25 (金) 16:26:13)
- 5 (2008-02-19 (火) 15:05:34)
- 6 (2008-10-01 (水) 17:24:00)
- 7 (2008-12-19 (金) 03:05:51)
- 8 (2009-01-20 (火) 11:55:43)
- 9 (2009-01-20 (火) 13:50:46)
- 10 (2009-04-24 (金) 20:56:58)
- 11 (2010-09-02 (木) 08:07:52)
- 12 (2011-05-31 (火) 03:17:00)
- 13 (2011-10-03 (月) 18:03:55)
- 14 (2011-10-04 (火) 16:19:06)
- 15 (2011-12-26 (月) 14:17:48)
- 16 (2013-03-15 (金) 16:58:30)
- 17 (2013-05-11 (土) 03:30:34)
- 18 (2013-05-13 (月) 20:08:18)
- 19 (2013-08-01 (木) 17:57:44)
- 20 (2014-04-08 (火) 19:21:11)
- 21 (2014-11-01 (土) 00:46:09)
- 22 (2014-11-29 (土) 01:52:41)
- 23 (2016-02-17 (水) 16:26:14)
- 24 (2016-09-02 (金) 13:29:50)
- 25 (2017-10-13 (金) 14:55:11)
- 26 (2018-02-24 (土) 19:51:30)
- 27 (2018-04-05 (木) 15:57:14)
- 28 (2018-10-16 (火) 13:28:40)
- 29 (2019-10-15 (火) 17:33:07)
- 30 (2021-05-14 (金) 19:24:07)
- 31 (2022-08-20 (土) 22:15:25)
- 32 (2022-09-12 (月) 18:11:59)
- 33 (2022-09-14 (水) 05:13:23)
TITLE:JScrollPaneのViewPortをマウスで掴んでスクロール
Posted by aterai at 2006-01-02
JScrollPaneのViewPortをマウスで掴んでスクロール
JScrollPaneの窓の中をマウスで掴んで画像をスクロールします。
- &jnlp;
- &jar;
- &zip;
サンプルコード
class HandScrollListener extends MouseInputAdapter {
private final Cursor defCursor = Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
private final Cursor hndCursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
private final Point pp = new Point();
@Override
public void mouseDragged(final MouseEvent e) {
Point cp = e.getPoint();
Point vp = vport.getViewPosition(); //= SwingUtilities.convertPoint(vport,0,0,label);
vp.translate(pp.x-cp.x, pp.y-cp.y);
//vport.setViewPosition(vp);
label.scrollRectToVisible(
new Rectangle(vp, vport.getSize()));
pp.setLocation(cp);
}
@Override
public void mousePressed(MouseEvent e) {
label.setCursor(hndCursor);
pp.setLocation(e.getPoint());
}
@Override
public void mouseReleased(MouseEvent e) {
label.setCursor(defCursor);
label.repaint();
}
}
解説
JViewportの原点(左上)を SwingUtilities.convertPointメソッドを使って中のJLabel(画像)の座標に変換し、これを基準座標としています。この座標を マウスの移動に応じて変更し、JComponent#scrollRectToVisibleメソッドの引数として使用することで、覗き窓のスクロールを行っています。
JComponent#scrollRectToVisible(...)ではなく、JViewport#setViewPosition(Point)を使用すると、内部コンポーネントの外側に移動することができます。
参考リンク
- JScrollPaneのオートスクロール
- 2000ピクセル以上のフリー写真素材集
- 大きな猫写真があったので拝借しています。
- Bug ID: 6333318 JViewPort.scrollRectToVisible( Rectangle cr ) doesn't scroll if cr left or above
- JScrollPaneでキネティックスクロール