public void mouseDragged(MouseEvent evt) {
   // User has moved the mouse.  Move the dragged shape by the same amount.
   int x = evt.getX();
   int y = evt.getY();
   if (shapeBeingDragged != null) {
     shapeBeingDragged.moveBy(x - prevDragX, y - prevDragY);
     prevDragX = x;
     prevDragY = y;
     repaint(); // redraw canvas to show shape in new position
   }
 }
 public void mouseReleased(MouseEvent evt) {
   // User has released the mouse.  Move the dragged shape, then set
   // shapeBeingDragged to null to indicate that dragging is over.
   // If the shape lies completely outside the canvas, remove it
   // from the list of shapes (since there is no way to ever move
   // it back onscreen).
   int x = evt.getX();
   int y = evt.getY();
   if (shapeBeingDragged != null) {
     shapeBeingDragged.moveBy(x - prevDragX, y - prevDragY);
     if (shapeBeingDragged.left >= getSize().width
         || shapeBeingDragged.top >= getSize().height
         || shapeBeingDragged.left + shapeBeingDragged.width < 0
         || shapeBeingDragged.top + shapeBeingDragged.height < 0) { // shape is off-screen
       shapes.remove(shapeBeingDragged); // remove shape from list of shapes
     }
     shapeBeingDragged = null;
     repaint();
   }
 }