# Systemuhr und Datum in JLabel anzeigen



## dayton (15. Dez 2003)

hallo,

ich brauche dringen hilfe !!!

 ich möchte gerne die systemuhr und das aktuelle datum mit java swing in einer GUI anzeigen. Ist es überhaupt möglich mit java swing die systemuhr anzuzeigen, weil ich schon viele foren durchstöber habe und meistens nur eine lösung mit java script gefunden habe.
Habe zwar einen lösungsansatz mit einem Calendar objekt, er zeigt mir allerdings nur die aktuelle uhrzeit an, die nicht geht.

wäre sehr dankbar für eine schnelle und unkomplizierte lösung/tipp.


----------



## Ebenius (15. Dez 2003)

Also ein bisschen was tun solltest Du schon noch. Ist aber auch nicht viel.

Also: Die aktuelle Zeit (inkl. tag, jahr, etc.):

```
Date currentTime = new Date();
```

Formatiert wird das ganze dann durch ein DateFormat:
DateFormat bzw. SimpleDateFormat

Und zyklisch aktualisieren kannst Du's am einfachsten mit dem
Swing-Timer (Swing Tutorial - How to Use Timers, Using Timers in Swing Applications)

Das ganze artet dann in etwa in folgendem aus:

```
final DateFormat theClockFormat = new SimpleDateFormat("HH:mm:ss");
final JLabel theClockLabel = new JLabel();
/* a timer with delay of one second */
final Timer clockTimer = new Timer(1000, new ActionListener() {
	public void actionPerformed(ActionEvent evt) {
		String text = theClockFormat.format(new Date());
		/* synchronized since threaded access */
		synchronized(theClockLabel.getTreeLock()) {
			theClockLabel.setText(text);
		}
	}
}
clockTimer.start();
```

noch das Label irgendwo hinpacken und geht (sofern ich nix vergessen hab )

Grüße, Ebenius


----------



## Ebenius (15. Dez 2003)

*Nachtrag:*

Zwei Dinge gibt's zu meinem Code-Beispiel noch zu sagen:

*1) Delay vs. Fixed Rate:* Dir wird wahrscheinlich ab und an mal eine Sekunde durch die Lappen gehen und bei etwas höherer Prozesslast kann es zu zeitlichen Verschiebungen (update alle 1,5 Sekunden, etc.) kommen. Die Zeit stimmt zwar trotzdem ungefähr, aber wenn es stört, dann nutze den _java.util.Timer_ mit _fixed Rated_ Tasks. Dann wird nicht eine Sekunde gewartet, sondern die Zeit zwischen Aufruf und Aufruf ist eine Sekunde, solange die Ausführung des Codes weniger als diese Sekunde dauert. Dieser Timer ist fast genauso einfach zu nutzen:


```
/* a timer */
final java.util.Timer clockTimer = new java.util.Timer(true);

/* a timer task with FIXED RATE of one second and initial delay of 0 */
clockTimer.scheduleAtFixedRate(new TimerTask() {
	public void run() {
		String text = theClockFormat.format(new Date());
		/* synchronized since threaded access */
		synchronized(theClockLabel.getTreeLock()) {
			theClockLabel.setText(text);
		}
	}
}, 0, 1000);
```

*2) Synchronization:* Der _synchronized_-Block steht da drin, weil das GUI ebenfals zu dieser Semaphore synchronisiert und damit niemals ein update durch die Lappen geht. Das sollte man allerdings auch weglassen können, da _setText(String)_ eigentlich als atomar betrachtet werden kann. Probier's aus.

So - das war's aber jetzt wirklich. Ganz schön viel Theorie für ne Uhr 

Ebenius


----------



## dayton (15. Dez 2003)

Vielen Dank, du hast mir sehr damit geholfen.

Hätte echt nicht gedacht, dass es nur ein paar Zeilen sind. Sonst habe ich Beispiele gesehen die locker auf eine Din A4 Seite passen würden.

Also nochmals Danke für deine Blitzanzwort


----------



## Ebenius (15. Dez 2003)

Kurz ist chick (trifft auf Röcke und Source-Code zu) 

Ebenius


----------



## AlArenal (15. Dez 2003)

"Chick" trifft eigentlich nur auf Hühner zu...


----------



## Ebenius (15. Dez 2003)

... bin müde. heißt natürlich *chique* *grins*


----------



## Guest (21. Dez 2003)

Wahrscheinlich sind die Beispiele, welche du gesehen hast mit Threads programmiert. Dann wird der Quelltext schnell lang. Ist aber relativ einfach zum programmieren da du nicht ein all zu grosses Wissen brauchst.


----------

