import java.awt.BorderLayout;
import java.awt.Checkbox;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import java.util.*;
// ------------------------------------------------------------
// Klasse welche ein Ampelfenster erzeugt
// Button kann in der Klasse Ampelabhoerer Programmiert werden
// ------------------------------------------------------------
public class Ampel extends JFrame {
  
  JButton btnWeiter;
  Checkbox chbAuto;
  int count = 0;
  
  private boolean rot, gelb, gruen; // zum Speichern der Farbzustände (an/aus)
  
  public Ampel(){ 
  // Konstruktor der Ampel
  // Erzeugt Fenster und Timer
    
    int fensterHoehe = 400;
    int fensterbreite = 200;
    this.setSize(fensterbreite, fensterHoehe);
    
    btnWeiter = new JButton("Weiter");
    chbAuto = new Checkbox("Automatisch");
    
    AmpelAbhoerer ampelAbhoerer = new AmpelAbhoerer(this);
    btnWeiter.addActionListener(ampelAbhoerer);
    
    getContentPane().setLayout(null); // freies Layout
    getContentPane().add(chbAuto);
    getContentPane().add(btnWeiter);
    
    chbAuto.setBounds(40, 320, 170, 15);
    btnWeiter.setBounds(5, 340, 170, 20);
    
    Dimension d = getToolkit().getDefaultToolkit().getScreenSize();
    this.setLocation(d.width/2 - fensterbreite/2, d.height/2 - fensterHoehe/2);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    Timer timer = new Timer();        // Timer erzeugen
    timer.schedule( new Task(), 0, 1000 );  // Timer sofort starten und dann pro Sekunde

  }
  
  public static void main(String[] args) {
    
    Ampel a = new Ampel();  // Ampel erzeugen
    a.setRot(true);
    a.setGelb(false);
    a.setGruen(false);
    a.setVisible(true);
  }

  public void paint(Graphics g){  
  // Zeichnen der Lichter
    super.paint(g);
    Graphics2D g2d = (Graphics2D)g;
    Ellipse2D.Double elRot = new Ellipse2D.Double(50,40,100,100);
    Ellipse2D.Double elGelb = new Ellipse2D.Double(50,140,100,100);
    Ellipse2D.Double elGruen = new Ellipse2D.Double(50,240,100,100);
    if (rot) {
      g2d.setColor(Color.RED);
      g2d.fill(elRot);
    } else {
      g2d.setColor(Color.BLACK);
      g2d.fill(elRot);
    }
    
    if (gelb) {
      g2d.setColor(Color.YELLOW);
      g2d.fill(elGelb);
    } else {
      g2d.setColor(Color.BLACK);
      g2d.fill(elGelb);
    }
    
    if (gruen) {
      g2d.setColor(Color.GREEN);
      g2d.fill(elGruen);
    } else {
      g2d.setColor(Color.BLACK);
      g2d.fill(elGruen);
    }
    
  }
  
    // Methoden zum Setzen der Lampen 
  public void setRot(boolean rot) {
    this.rot = rot;
    repaint();
  }
  public void setGelb(boolean gelb) {
    this.gelb = gelb;
    repaint();
  }
  public void setGruen(boolean gruen) {
    this.gruen = gruen;
    repaint();
  }
  
  // Methoden zum Abfragen der Lampen 
  public boolean getRot() {
    return this.rot; 
  }
  public boolean getGelb() {
    return this.gelb;
  }
  public boolean getGruen() {
    return this.gruen; 
  }
  
  // Timer Klasse 
  class Task extends TimerTask{
    public void run(){
      if (chbAuto.getState()) {  // Ausführen wenn Chekbox angehakt
        count++;
        System.out.println(count);
        btnWeiter.doClick();
      }
    }
  }
  
} // Ende

