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をマウスで掴んでスクロール #navi(../) RIGHT:Posted by [[terai]] at 2006-01-02 *JScrollPaneのViewPortをマウスで掴んでスクロール [#ef47828b] JScrollPaneの窓の中をマウスで掴んで画像をスクロールします。 -&jnlp; -&jar; -&zip; #screenshot **サンプルコード [#e92a8d9e] #code{{ 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(); } } }} **解説 [#bf42cf21] JViewportの原点(左上)をSwingUtilities.convertPointメソッドを使って中のJLabel(画像)の座標に変換し、これを基準座標としています。この座標をマウスの移動に応じて変更し、JComponent#scrollRectToVisibleメソッドの引数として使用することで、覗き窓のスクロールを行っています。 **参考リンク [#b337b5bb] -[[JScrollPaneのオートスクロール>Swing/AutoScroll]] -[[2000ピクセル以上のフリー写真素材集>http://sozai-free.com/]] --大きな''猫''写真があったので拝借しています。 **コメント [#ubd1d4e0] - つかんで移動ということですが、移動方向が逆の気がします。 -- [[名無し]] &new{2006-02-25 (土) 01:24:46}; -- ご指摘ありがとうございます。確かに逆ですね。画像を掴んでというより、スクロールバーを掴んでみたいな動きになってました。修正しておきます。 -- [[terai]] &new{2006-02-25 (土) 03:33:50}; #comment