import javax.swing.JPanel;
import javax.swing.JComponent;

/** Diese Klasse stellt eine Uhr grafisch dar.
  * Wir werden diese Klasse im Laufe der Zeit
  * so ausbauen, dass sie analog und digital
  * darstellen und die Anzeige im Sekundentakt
  * aktualisieren kann.
  **/
public class SwingUhr extends JPanel implements Steuerung {

  /** Unsere DigitalAnzeige */
  private Anzeige digital;
  
  /** unser einfaches Systemzeit-Uhrwerk */
  private Uhrwerk systemZeit;
  
  /** Eine Referenz auf das gerade verwendete Anzeigen-Objekt */
  private JComponent aktuell;
  
  /** Konstruktor.
    **/
  public SwingUhr() {
    // Erzeuge die Instanzen fuer Uhrwerk und Anzeige
    digital = new DigitalAnzeige();
    systemZeit = new Systemzeit();
    // Gehe sicher, dass das Uhrwerk gesetzt ist
    digital.setUhrwerk(systemZeit);
    // Leite die DigitalAnzeige an die Oberflaeche weiter
    setDigital();
  }
  
  /** Diese Methode aktiviert die digitale Darstellung der
    * Uhrzeit. Im naechsten Praxiskapitel werden wir eine
    * weitere Methode fuer eine Analoguhr hinzufuegen.
    **/
  public void setDigital()
  {
    // Fall: Wir sind ohnehin schon auf der digitalen Anzeige
    if (aktuell != null && aktuell.equals(digital))
      return;
    // Andernfalls loeschen wir die aktuelle Komponente und ersetzen
    // sie durch die Digitalanzeige
    if (aktuell != null)
      remove(aktuell);
    aktuell = (JComponent) digital;
    add(aktuell);
  }
  
  /** Diese Methode signalisiert der Steuerung, dass
    * sie mit ihrer Arbeit beginnen soll.
    **/
  public void aktivieren() {
    digital.zeigeZeit();
  }
  
  /** Diese Methode signalisiert der Steuerung, dass
    * sie ihre Arbeit jetzt beenden kann.
    **/
  public void beenden() {
    // Keine besonderen Aktionen notwendig
  }
 
}
