1  import java.awt.*;
  2  import java.awt.event.*;
  3  import java.awt.geom.*;
  4  import javax.swing.*;
  5  import java.util.*;
  6  
  7  /**
  8     A component that shows a car.
  9  */
 10  public class CarComponent extends JComponent
 11  {
 12     public CarComponent()
 13     {
 14        car = new CarShape(20, 20, 50);
 15        addMouseListener(new MousePressedListener());
 16        addMouseMotionListener(new MouseDraggedListener());
 17     }
 18     
 19     private class MousePressedListener extends MouseAdapter
 20     {
 21        public void mousePressed(MouseEvent event)
 22        {
 23           mousePoint = event.getPoint();
 24           if (!car.contains(mousePoint)) mousePoint = null;
 25        }
 26     }
 27  
 28     private class MouseDraggedListener extends MouseMotionAdapter
 29     {
 30        public void mouseDragged(MouseEvent event)
 31        {
 32           if (mousePoint == null) return;
 33           Point lastMousePoint = mousePoint;
 34           mousePoint = event.getPoint();
 35           double dx = mousePoint.getX() - lastMousePoint.getX();
 36           double dy = mousePoint.getY() - lastMousePoint.getY();
 37           car.translate((int) dx, (int) dy);
 38           repaint();
 39        }
 40     }
 41     
 42     public void paintComponent(Graphics g)
 43     {
 44        Graphics2D g2 = (Graphics2D) g;
 45        car.draw(g2);
 46     }
 47  
 48     private CarShape car;
 49     private Point mousePoint;
 50  }