import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class DragScrollJLabelDemo extends JFrame {
private JPanel panel;
private Rectangle rect;
private Point point;
public DragScrollJLabelDemo() {
panel = new JPanel() {
public void paintComponent(Graphics g) {
super.paintComponent(g);
int w = this.getWidth();
int h = this.getHeight();
g.drawLine(0, 0, w, h);
g.drawLine(0, h, w, 0);
for (int i=0; i<10; i++)
g.drawRect(i*w/10, i*h/10, w - 2*i*w/10, h - 2*i*h/10);
}
};
panel.setPreferredSize(new Dimension(800, 600));
this.getContentPane().add(new JScrollPane(panel));
panel.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
rect = panel.getVisibleRect();
point = e.getPoint();
}
public void mouseReleased(MouseEvent e) {}
});
panel.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
rect.setLocation(rect.x + (point.x - e.getX()), rect.y + (point.y - e.getY()));
panel.scrollRectToVisible(rect);
}
});
}
public static void main(String[] args) {
final JFrame frame = new DragScrollJLabelDemo();
frame.setBounds(0, 0, 300, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}