Swing/HandScroll のバックアップ(No.33)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - 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)
- category: swing
folder: HandScroll
title: JScrollPaneのViewportをマウスで掴んでスクロール
tags: [JScrollPane, JViewport, MouseListener, MouseMotionListener, JLabel]
author: aterai
pubdate: 2006-01-02T06:45:45+09:00
description: JScrollPaneの窓の中をマウスで掴んで画像をスクロールします。
image:
hreflang:
href: https://java-swing-tips.blogspot.com/2009/03/mouse-dragging-viewport-scroll.html lang: en
概要
JScrollPane
の窓の中をマウスで掴んで画像をスクロールします。
Screenshot
Advertisement
サンプルコード
class HandScrollListener extends MouseAdapter {
private final Cursor defCursor = Cursor.getDefaultCursor();
private final Cursor hndCursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
private final Point pp = new Point();
@Override public void mouseDragged(MouseEvent e) {
JViewport vport = (JViewport) e.getComponent();
Point cp = e.getPoint();
Point vp = vport.getViewPosition();
// = SwingUtilities.convertPoint(vport, 0, 0, label);
vp.translate(pp.x - cp.x, pp.y - cp.y);
// if (r1.isSelected()) {
label.scrollRectToVisible(new Rectangle(vp, vport.getSize()));
// } else {
// vport.setViewPosition(vp);
// }
pp.setLocation(cp);
}
@Override public void mousePressed(MouseEvent e) {
e.getComponent().setCursor(hndCursor);
pp.setLocation(e.getPoint());
}
@Override public void mouseReleased(MouseEvent e) {
e.getComponent().setCursor(defCursor);
}
}
View in GitHub: Java, Kotlin解説
JViewport
の原点(左上)をマウスの移動に応じて変更し、JComponent#scrollRectToVisible
メソッドの引数として使用して覗き窓のスクロールを行っています。
JComponent#scrollRectToVisible(...)
ではなくJViewport#setViewPosition(Point)
を使用すると内部コンポーネントの外側に移動可能
参考リンク
- JScrollPaneのオートスクロール
- 2000ピクセル以上のフリー写真素材集
- 猫の写真を引用
- JDK-6333318 JViewPort.scrollRectToVisible( Rectangle cr ) doesn't scroll if cr left or above - Java Bug System
JDK 1.7.0
から、JViewport#setViewPosition(Point)
などで左上外部に移動不可になっているJava 11
で修正済
- JScrollPaneでキネティックスクロール
- JTreeの余白をドラッグしてスクロール