ImprovedMouseDragger
Retired DISLab
import acm.program.*; import acm.graphics.*; import java.awt.event.*; public class ImprovedMouseDragger extends GraphicsProgram { private GOval theCircle; private boolean draggingCircle = false; private double displaceX, displaceY; public void run() { theCircle = new GOval(150,150); add(theCircle,100,100); addMouseListeners(); } public void mousePressed(MouseEvent e) { if (getElementAt(e.getX(),e.getY()) == theCircle) { displaceX = e.getX() - theCircle.getX(); displaceY = e.getY() - theCircle.getY(); draggingCircle = true; } } public void mouseReleased(MouseEvent e) { draggingCircle = false; } public void mouseDragged(MouseEvent e) { if (draggingCircle) { theCircle.setLocation(e.getX() - displaceX, e.getY() - displaceY); } } public static void main(String[] args) { String[] newArgs = new String[args.length + 1]; System.arraycopy(args, 0, newArgs, 0, args.length); newArgs[args.length] = "code=" + new SecurityManager(){ public String className() { return this.getClassContext()[1].getCanonicalName(); } }.className(); GraphicsProgram.main(newArgs); } }