CrossWalkPanel.java 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package traffic.light;
  2. import java.awt.Color;
  3. import java.awt.Dimension;
  4. import java.awt.Graphics;
  5. import java.awt.Point;
  6. import javax.swing.JPanel;
  7. import traffic.light.TrafficLight.Alignment;
  8. public class CrossWalkPanel extends JPanel {
  9. private static final long serialVersionUID = -7137708533029709629L;
  10. protected TrafficLight trafficLight;
  11. protected PedestrianLight pedLight;
  12. public CrossWalkPanel() {
  13. super();
  14. trafficLight = new TrafficLight(Alignment.HORIZONTAL);
  15. pedLight = new PedestrianLight(PedestrianLight.Alignment.VERTICAL);
  16. }
  17. public TrafficLight getTrafficLight() {
  18. return trafficLight;
  19. }
  20. public PedestrianLight getPedLight() {
  21. return pedLight;
  22. }
  23. public void paint(Graphics g) {
  24. paintCrossing(g);
  25. paintTrafficLights(g);
  26. paintPedestrainLights(g);
  27. g.dispose();
  28. }
  29. protected void paintPedestrainLights(Graphics g) {
  30. pedLight.updatePosition(new Point(210, 80));
  31. pedLight.paint(g);
  32. }
  33. protected void paintTrafficLights(Graphics g) {
  34. trafficLight.updatePosition(new Point(170, 280));
  35. trafficLight.paint(g);
  36. }
  37. protected void paintCrossing(Graphics g) {
  38. int width = getSize().width;
  39. int streetYOffset = 150;
  40. int streetWidth = 100;
  41. Dimension streetEastWest = new Dimension(width, streetWidth);
  42. g.setColor(Color.darkGray);
  43. paint(streetEastWest, 0, streetYOffset, true, g);
  44. g.setColor(Color.white);
  45. Dimension laneSeparator = new Dimension(20, 4);
  46. for (int i=0; i<4; i++) {
  47. paint(laneSeparator, i * 2 * laneSeparator.width , streetYOffset -2 + streetWidth / 2, true, g);
  48. }
  49. Dimension stopLine = new Dimension(10, streetWidth/2 +2);
  50. paint(stopLine, 7 * laneSeparator.width , streetYOffset -2 + streetWidth / 2, true, g);
  51. Dimension zebraStripe = new Dimension(80, 10);
  52. paint(zebraStripe, 9 * laneSeparator.width , streetYOffset + 5, true, g);
  53. paint(zebraStripe, 9 * laneSeparator.width , streetYOffset + 25 , true, g);
  54. paint(zebraStripe, 9 * laneSeparator.width , streetYOffset + 45 , true, g);
  55. paint(zebraStripe, 9 * laneSeparator.width , streetYOffset + 65 , true, g);
  56. paint(zebraStripe, 9 * laneSeparator.width , streetYOffset + 85 , true, g);
  57. paint(stopLine, 11 * laneSeparator.width + zebraStripe.width - stopLine.width, streetYOffset, true, g);
  58. for (int i=0; i<4; i++) {
  59. paint(laneSeparator, (i * 2 + 11) * laneSeparator.width + zebraStripe.width, streetYOffset -2 + streetWidth / 2, true, g);
  60. }
  61. }
  62. protected void paint(Dimension area, int x, int y, boolean horizontally, Graphics g) {
  63. g.fillRect(x, y,
  64. horizontally ? area.width : area.height,
  65. horizontally ? area.height : area.width);
  66. }
  67. }