Swing/HandScroll のバックアップ(No.8)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - 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 terai at 2006-01-02
JScrollPaneのViewPortをマウスで掴んでスクロール
JScrollPaneの窓の中をマウスで掴んで画像をスクロールします。
- &jnlp;
- &jar;
- &zip;
#screenshot
サンプルコード
class HandScrollListener extends MouseInputAdapter {
private final Rectangle rect = new Rectangle();
private final Cursor defCursor = Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
private final Cursor hndCursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
private int startX, startY;
@Override
public void mouseDragged(final MouseEvent e) {
Rectangle vr = vport.getViewRect();
int w = vr.width;
int h = vr.height;
int x = e.getX();
int y = e.getY();
Point pt = SwingUtilities.convertPoint(vport,0,0,label);
rect.setRect(pt.x-x+startX, pt.y-y+startY, w, h);
label.scrollRectToVisible(rect);
startX = x;
startY = y;
}
@Override
public void mousePressed(MouseEvent e) {
startX = e.getX();
startY = e.getY();
label.setCursor(hndCursor);
}
@Override
public void mouseReleased(MouseEvent e) {
label.setCursor(defCursor);
label.repaint();
}
}
解説
JViewportの原点(左上)をSwingUtilities.convertPointメソッドを使って中のJLabel(画像)の座標に変換し、これを基準座標としています。この座標をマウスの移動に応じて変更し、JComponent#scrollRectToVisibleメソッドの引数として使用することで、覗き窓のスクロールを行っています。
参考リンク
- JScrollPaneのオートスクロール
- 2000ピクセル以上のフリー写真素材集
- 大きな猫写真があったので拝借しています。