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?

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:

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 😉