Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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.
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 )
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:
Code:
/* 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
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.