import java.awt.Container;
import java.awt.Cursor;
import java.awt.Point;
import java.awt.event.MouseEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JViewport;
import javax.swing.event.MouseInputAdapter;
public class Main extends JFrame {
public Main() {
super("Grab and drag Demo");
ImageIcon ii = new ImageIcon("largeJava2sLogo.jpg");
JScrollPane jsp = new JScrollPane(new GrabAndScrollLabel(ii));
getContentPane().add(jsp);
setSize(300, 250);
setVisible(true);
super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new Main();
}
}
class GrabAndScrollLabel extends JLabel {
public GrabAndScrollLabel(ImageIcon i) {
super(i);
MouseInputAdapter mia = new MouseInputAdapter() {
int xDiff, yDiff;
Container c;
public void mouseDragged(MouseEvent e) {
c = GrabAndScrollLabel.this.getParent();
if (c instanceof JViewport) {
JViewport jv = (JViewport) c;
Point p = jv.getViewPosition();
int newX = p.x - (e.getX() - xDiff);
int newY = p.y - (e.getY() - yDiff);
int maxX = GrabAndScrollLabel.this.getWidth() - jv.getWidth();
int maxY = GrabAndScrollLabel.this.getHeight() - jv.getHeight();
if (newX < 0)
newX = 0;
if (newX > maxX)
newX = maxX;
if (newY < 0)
newY = 0;
if (newY > maxY)
newY = maxY;
jv.setViewPosition(new Point(newX, newY));
}
}
public void mousePressed(MouseEvent e) {
setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
xDiff = e.getX();
yDiff = e.getY();
}
public void mouseReleased(MouseEvent e) {
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
};
addMouseMotionListener(mia);
addMouseListener(mia);
}
}
|