JScrollPaneのViewportをマウスで掴んでスクロール
Total: 19217
, Today: 2
, Yesterday: 5
Posted by aterai at
Last-modified:
概要
JScrollPane
の窓の中をマウスで掴んで画像をスクロールします。
サンプルコード
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
ではなくScrollPane
で無関係?
- JScrollPaneでキネティックスクロール
- JTreeの余白をドラッグしてスクロール