DragUsingInnerClasses
Retired DISLab
import acm.program.*; import acm.graphics.*; import java.awt.*; import java.awt.event.*; public class DragUsingInnerClasses extends GraphicsProgram { public void init() { GRect rect = new GRect(100, 100, 150, 100); rect.setFilled(true); rect.setColor(Color.RED); add(rect); GOval oval = new GOval(300, 115, 100, 70); oval.setFilled(true); oval.setColor(Color.GREEN); add(oval); GCanvas canvas = getGCanvas(); canvas.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { last = new GPoint(e.getPoint()); gobj = getElementAt(last); } public void mouseClicked(MouseEvent e) { if (gobj != null) gobj.sendToFront(); } }); canvas.addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent e) { if (gobj != null) { gobj.move(e.getX() - last.getX(), e.getY() - last.getY()); last = new GPoint(e.getPoint()); } } }); } /* Private instance variables */ private GObject gobj; /* The object being dragged */ private GPoint last; /* The last mouse position */ private static final long serialVersionUID = 1; }