001: import java.awt.*; 002: import java.awt.geom.*; 003: import javax.swing.*; 004: 005: /** 006: A panel that draws a car shape. 007: */ 008: public class CarBean extends JPanel 009: { 010: /** 011: Constructs a default car bean. 012: */ 013: public CarBean() 014: { 015: x = 0; 016: y = 0; 017: width = DEFAULT_CAR_WIDTH; 018: height = DEFAULT_CAR_HEIGHT; 019: } 020: 021: /** 022: Sets the x property. 023: @param newValue the new x position 024: */ 025: public void setX(int newValue) 026: { 027: x = newValue; 028: repaint(); 029: } 030: 031: /** 032: Gets the x property. 033: @return the x position 034: */ 035: public int getX() 036: { 037: return x; 038: } 039: 040: /** 041: Sets the y property. 042: @param newValue the new y position 043: */ 044: public void setY(int newValue) 045: { 046: y = newValue; 047: repaint(); 048: } 049: 050: /** 051: Gets the y property. 052: @return the y position 053: */ 054: public int getY() 055: { 056: return y; 057: } 058: 059: public void paintComponent(Graphics g) 060: { 061: super.paintComponent(g); 062: Graphics2D g2 = (Graphics2D) g; 063: Rectangle2D.Double body 064: = new Rectangle2D.Double(x, y + height / 3, 065: width - 1, height / 3); 066: Ellipse2D.Double frontTire 067: = new Ellipse2D.Double(x + width / 6, 068: y + height * 2 / 3, height / 3, height / 3); 069: Ellipse2D.Double rearTire 070: = new Ellipse2D.Double(x + width * 2 / 3, 071: y + height * 2 / 3, height / 3, height / 3); 072: 073: // the bottom of the front windshield 074: Point2D.Double r1 075: = new Point2D.Double(x + width / 6, y + height / 3); 076: // the front of the roof 077: Point2D.Double r2 078: = new Point2D.Double(x + width / 3, y); 079: // the rear of the roof 080: Point2D.Double r3 081: = new Point2D.Double(x + width * 2 / 3, y); 082: // the bottom of the rear windshield 083: Point2D.Double r4 084: = new Point2D.Double(x + width * 5 / 6, y + height / 3); 085: 086: Line2D.Double frontWindshield 087: = new Line2D.Double(r1, r2); 088: Line2D.Double roofTop 089: = new Line2D.Double(r2, r3); 090: Line2D.Double rearWindshield 091: = new Line2D.Double(r3, r4); 092: 093: g2.draw(body); 094: g2.draw(frontTire); 095: g2.draw(rearTire); 096: g2.draw(frontWindshield); 097: g2.draw(roofTop); 098: g2.draw(rearWindshield); 099: } 100: 101: public Dimension getPreferredSize() 102: { 103: return new Dimension(DEFAULT_PANEL_WIDTH, 104: DEFAULT_PANEL_HEIGHT); 105: } 106: 107: private int x; 108: private int y; 109: private int width; 110: private int height; 111: 112: private static final int DEFAULT_CAR_WIDTH = 60; 113: private static final int DEFAULT_CAR_HEIGHT = 30; 114: private static final int DEFAULT_PANEL_WIDTH = 160; 115: private static final int DEFAULT_PANEL_HEIGHT = 130; 116: }