package javacodebook.gui.timelabel;

import java.util.Date;
import java.awt.Label;
import java.text.SimpleDateFormat;

/**
 * Das TimeLabel zeigt die laufende Uhrzeit an.
 * Damit sonstige Aufgaben nicht in Mitleidenschaft gezogen werden,
 * wird die Darstellung der Zeit in einem extra Thread realisiert
 **/ 

class TimeLabel extends Label implements Runnable {
	
	private SimpleDateFormat sdf = new SimpleDateFormat("'Es ist ' hh:mm:ss ' Uhr'");
    private String dateString;
	private Date d = new Date();

	public TimeLabel() {
		setAlignment(Label.CENTER);	
		setText(getDateString());		
	}

	/**
	 * Liefert das formatierte Datum in Form eines Strings zurück.
	**/
	private String getDateString() {
   		// Aktuelle Uhrzeit wird ermittelt, und dem Datums-Objekt zugewiesen
		d.setTime(System.currentTimeMillis());
		// aus dem Datumsobjekt wird nach obiger Vorgabe (im Konsruktor von SimpleDateFormat)
		// ein String erstelllt
		dateString = sdf.format(d);
		return dateString;
	} 

	/**
	 * Die run()-Methode, muss überschrieben werden, da Sie im Runnable Interface definiert ist. 
	 * Sie wird ausgeführt, wenn der Thread gestartet wurde.
	**/
	public void run() {

		// Endlos-Schleife
     	while(true) {

			// Dem Label wird die Beschriftung mit der aktuellen Uhrzeit zugewiesen  
			this.setText(getDateString());
			// Da nur Sekunden angezeigt werden, kann der Thread sich ohne Auswirkungen 
			// für eine knappe Sekunde schlafen legen.
			try {
		  		Thread.currentThread().sleep(995); // Bei 1000 msec könnte eine Sekunde übersprungen werden
			}
			catch (InterruptedException ie) {
				ie.printStackTrace();
			} 
	   	} 	
	} 	
}