Bei meinen Simple Shutdown habe ich gerade einen kleinen Countdown eingebaut.
Hierbei stand ich vor der Frage: Wie kriege ich zB. 3000 Sekunden in eine angenehm lesbare Form?
Ergebnis sollte sein: „Ihr PC wird heruntergefahren in 01:30:47 Stunden“ (inklusive einem herunterzählendem Countdown)
Aushilfe schafft hierbei der mathematische Operator Modulo – von mir bisher nur eingesetzt um herauszufinden, ob eine Zahl x gerade oder ungerade ist, um zB. jeden zweiten App-Start eine bestimmte Aktion ausführen zu können. Doch Modulo, oder Division mit Rest, wie man ihn auch nennt, kann uns super bei helfen, Sekunden zu formatieren! 🙂
Wie läuft das jetzt in Java ab?
1 2 3 |
int seconds = (int) (counterValue) % 60 ; int minutes = (int) ((counterValue / (60)) % 60); int hours = (int) ((counterValue / (60*60)) % 24); |
wobei counterValue meine übrige Zeit in Sekunden darstellt. (Für Millisekunden selbsterklärender Weise noch zusätzlich counterValue / 1000)
Die komplette Methode, welche mir den Countdown in diesem Format in mein jLabel schreibt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
private void startCountdown() { // Timer erzeugen, jede 1000 Millisekunden (= 1 Sekunde) actionPerformed aufrufen. Shutdown.timer = new Timer(1000, new ActionListener() { public void actionPerformed(ActionEvent e) { counterValue--; // 1 Sekunde abziehen //Sekunden 'umrechnen' int seconds = (int) (counterValue) % 60 ; int minutes = (int) ((counterValue / (60)) % 60); int hours = (int) ((counterValue / (60*60)) % 24); //ändern des jLabels eingabe("Verbleibende Zeit bis zum Shutdown: " + hours+":"+minutes+":"+seconds); } }); // Timer starten timer.start(); |
eingabe() sieht einfach nur so aus:
1 2 3 |
private void eingabe(String a) { jlabel_anzeige.setText(a); } |
Vielleicht hilft das ja dem ein oder anderen, der auch einen Countdown in Java / Swing schön darstellen möchte 🙂
Ich möchte daran erinnern, dass das lediglich kleine (vermutlich primitive) Erkenntnisse meiner seits sind – höchstwahrscheinlich kann man das auch eleganter lösen 😉