Contents:
CarMover.javaimport java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.*;
/**
A program that allows users to move a car with the mouse.
*/
public class CarMover extends JApplet
{
public CarPanel panel;
public void init() {
panel = new CarPanel();
getContentPane().add(panel);
}
public void start() {
}
public void stop() {
}
public static void main(String[] args)
{
final int FRAME_WIDTH = 400;
final int FRAME_HEIGHT = 400;
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = frame.getContentPane();
contentPane.add(new CarPanel());
frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
frame.setVisible(true);
}
}
CarPanel.javaimport java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;
import java.util.*;
/**
A panel that shows a scene composed of items.
*/
public class CarPanel extends JPanel
{
public CarPanel()
{
car = new CarShape(20, 20, 50);
addMouseListener(new
MouseAdapter()
{
public void mousePressed(MouseEvent event)
{
mousePoint = event.getPoint();
if (!car.contains(mousePoint))
mousePoint = null;
}
});
addMouseMotionListener(new
MouseMotionAdapter()
{
public void mouseDragged(MouseEvent event)
{
if (mousePoint == null) return;
Point lastMousePoint = mousePoint;
mousePoint = event.getPoint();
car.translate(
mousePoint.getX() - lastMousePoint.getX(),
mousePoint.getY() - lastMousePoint.getY());
repaint();
}
});
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
car.draw(g2);
}
private CarShape car;
private Point mousePoint;
}
CarShape.javaimport java.awt.*;
import java.awt.geom.*;
/**
A car shape.
*/
public class CarShape
{
/**
Constructs a car shape.
@param x the left of the bounding rectangle
@param y the top of the bounding rectangle
@param width the width of the bounding rectangle
*/
public CarShape(int x, int y, int width)
{
this.x = x;
this.y = y;
this.width = width;
}
public void draw(Graphics2D g2)
{
Rectangle2D.Double body
= new Rectangle2D.Double(x, y + width / 6,
width - 1, width / 6);
Ellipse2D.Double frontTire
= new Ellipse2D.Double(x + width / 6, y + width / 3,
width / 6, width / 6);
Ellipse2D.Double rearTire
= new Ellipse2D.Double(x + width * 2 / 3,
y + width / 3,
width / 6, width / 6);
// the bottom of the front windshield
Point2D.Double r1
= new Point2D.Double(x + width / 6, y + width / 6);
// the front of the roof
Point2D.Double r2
= new Point2D.Double(x + width / 3, y);
// the rear of the roof
Point2D.Double r3
= new Point2D.Double(x + width * 2 / 3, y);
// the bottom of the rear windshield
Point2D.Double r4
= new Point2D.Double(x + width * 5 / 6, y + width / 6);
Line2D.Double frontWindshield
= new Line2D.Double(r1, r2);
Line2D.Double roofTop
= new Line2D.Double(r2, r3);
Line2D.Double rearWindshield
= new Line2D.Double(r3, r4);
g2.draw(body);
g2.draw(frontTire);
g2.draw(rearTire);
g2.draw(frontWindshield);
g2.draw(roofTop);
g2.draw(rearWindshield);
}
public boolean contains(Point2D p)
{
return x <= p.getX() && p.getX() <= x + width
&& y <= p.getY() && p.getY() <= y + width / 2;
}
public void translate(double dx, double dy)
{
x += dx;
y += dy;
}
private int x;
private int y;
private int width;
}
Maintained by John Loomis, updated Sun Feb 25 23:14:03 2007