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_WIDTH; 018: height = DEFAULT_HEIGHT; 019: color = DEFAULT_COLOR; 020: fill = false; 021: } 022: 023: /** 024: Sets the color property. 025: @param color the new color 026: */ 027: public void setColor(Color color) 028: { 029: this.color = color; 030: repaint(); 031: } 032: 033: /** 034: Gets the color property. 035: @return the current color 036: */ 037: public Color getColor() { return color; } 038: 039: /** 040: Sets the dimension property. 041: @param dimension the new dimension of the house 042: */ 043: public void setDimension(Dimension dimension) 044: { 045: width = (int) dimension.getWidth(); 046: height = (int) dimension.getHeight(); 047: repaint(); 048: } 049: 050: /** 051: Gets the dimension property. 052: @return the current dimension of the house 053: */ 054: public Dimension getDimension() 055: { 056: return new Dimension(width, height); 057: } 058: 059: /** 060: Sets the drawMode property. 061: @param drawMode the new drawMode (DRAW or FILL) 062: */ 063: public void setDrawMode(DrawMode drawMode) 064: { 065: if (drawMode == DrawMode.DRAW) 066: { 067: fill = false; 068: repaint(); 069: } 070: else if (drawMode == DrawMode.FILL) 071: { 072: fill = true; 073: repaint(); 074: } 075: } 076: 077: /** 078: Gets the drawMode property. 079: @return the current drawMode (DRAW or FILL) 080: */ 081: public DrawMode getDrawMode() 082: { 083: if (fill) return DrawMode.FILL; 084: else return DrawMode.DRAW; 085: } 086: 087: public void paintComponent(Graphics g) 088: { 089: super.paintComponent(g); 090: Graphics2D g2 = (Graphics2D) g; 091: Rectangle2D.Double body 092: = new Rectangle2D.Double(x, y + height / 3, 093: width - 1, height / 3); 094: Ellipse2D.Double frontTire 095: = new Ellipse2D.Double(x + width / 6, 096: y + height * 2 / 3, height / 3, height / 3); 097: Ellipse2D.Double rearTire 098: = new Ellipse2D.Double(x + width * 2 / 3, 099: y + height * 2 / 3, height / 3, height / 3); 100: 101: // the bottom of the front windshield 102: Point2D.Double r1 103: = new Point2D.Double(x + width / 6, y + height / 3); 104: // the front of the roof 105: Point2D.Double r2 106: = new Point2D.Double(x + width / 3, y); 107: // the rear of the roof 108: Point2D.Double r3 109: = new Point2D.Double(x + width * 2 / 3, y); 110: // the bottom of the rear windshield 111: Point2D.Double r4 112: = new Point2D.Double(x + width * 5 / 6, y + height / 3); 113: Line2D.Double frontWindshield 114: = new Line2D.Double(r1, r2); 115: Line2D.Double roofTop 116: = new Line2D.Double(r2, r3); 117: Line2D.Double rearWindshield 118: = new Line2D.Double(r3, r4); 119: 120: g2.setColor(color); 121: if (fill) 122: { 123: g2.fill(body); 124: g2.fill(frontTire); 125: g2.fill(rearTire); 126: } 127: else 128: { 129: g2.draw(body); 130: g2.draw(frontTire); 131: g2.draw(rearTire); 132: } 133: g2.draw(frontWindshield); 134: g2.draw(roofTop); 135: g2.draw(rearWindshield); 136: } 137: 138: public static final int DRAW = 0; 139: public static final int FILL = 1; 140: 141: private int x; 142: private int y; 143: private Color color; 144: private int width; 145: private int height; 146: private boolean fill; 147: 148: private static final int DEFAULT_WIDTH = 50; 149: private static final int DEFAULT_HEIGHT = 80; 150: private static final Color DEFAULT_COLOR = Color.BLACK; 151: }