127 lines
3.4 KiB
Java
127 lines
3.4 KiB
Java
/**
|
|
* Die Klassen Uhrenanzeige implementiert die Anzeige einer Digitaluhr.
|
|
* Die Anzeige zeigt Stunden und Minuten. Der Anzeigebereich reicht von
|
|
* 00:00 (Mitternacht) bis 23:59 (eine Minute vor Mitternacht).
|
|
*
|
|
* Eine Uhrenanzeige sollte minütlich "Taktsignale" (über die Operation
|
|
* "taktsignalGeben") erhalten, damit sie die Anzeige aktualisieren
|
|
* kann. Dies geschieht, wie man es bei einer Uhr erwartet: Die
|
|
* Stunden erhöhen sich, wenn das Minutenlimit einer Stunde erreicht
|
|
* ist.
|
|
*
|
|
* @author Michael Kölling und David J. Barnes
|
|
* @version 31.07.2011
|
|
*/
|
|
public class Uhrenanzeige
|
|
{
|
|
private int stundenLimit;
|
|
private int stundenWert;
|
|
private int minutenLimit;
|
|
private int minutenWert;
|
|
private int sekundenLimit;
|
|
private int sekundenWert;
|
|
private String zeitanzeige; // simuliert die tatsaechliche Anzeige
|
|
|
|
/**
|
|
* Konstruktor fuer ein Exemplar von Uhrenanzeige.
|
|
* Mit diesem Konstruktor wird die Anzeige auf 00:00 initialisiert.
|
|
*/
|
|
public Uhrenanzeige()
|
|
{
|
|
stundenLimit = 24;
|
|
stundenWert = 0;
|
|
minutenLimit = 60;
|
|
minutenWert = 0;
|
|
sekundenLimit = 60;
|
|
sekundenWert = 0;
|
|
anzeigeAktualisieren();
|
|
}
|
|
|
|
/**
|
|
* Konstruktor fuer ein Exemplar von Uhrenanzeige.
|
|
* Mit diesem Konstruktor wird die Anzeige auf den Wert
|
|
* initialisiert, der durch 'stunde' und 'minute'
|
|
* definiert ist.
|
|
*/
|
|
public Uhrenanzeige(int stunde, int minute, int sekunde)
|
|
{
|
|
stundenLimit = 24;
|
|
stundenWert = 0;
|
|
minutenLimit = 60;
|
|
minutenWert = 0;
|
|
sekundenLimit = 60;
|
|
sekundenWert = 0;
|
|
setzeUhrzeit(stunde, minute, sekunde);
|
|
}
|
|
|
|
/**
|
|
* Diese Operation sollte einmal pro Minute aufgerufen werden -
|
|
* sie sorgt dafuer, dass diese Uhrenanzeige um eine Minute
|
|
* weiter gestellt wird.
|
|
*/
|
|
public void taktsignalGeben()
|
|
{
|
|
sekundenWert = (sekundenWert + 1) % sekundenLimit;
|
|
if(sekundenWert == 0) {
|
|
minutenWert = (minutenWert + 1) % minutenLimit;
|
|
if (minutenWert == 0) { // Limit wurde erreicht!
|
|
stundenWert = (stundenWert + 1) % stundenLimit;
|
|
}
|
|
}
|
|
anzeigeAktualisieren();
|
|
}
|
|
|
|
/**
|
|
* Setze die Uhrzeit dieser Anzeige auf die gegebene 'stunde' und
|
|
* 'minute'.
|
|
*/
|
|
public void setzeUhrzeit(int stunde, int minute, int sekunde)
|
|
{
|
|
if((stunde >= 0) && (stunde < stundenLimit)) {
|
|
stundenWert = stunde;
|
|
}
|
|
if((minute >= 0) && (minute < minutenLimit)) {
|
|
minutenWert = minute;
|
|
}
|
|
if((sekunde >= 0) && (sekunde < sekundenLimit)) {
|
|
sekundenWert = sekunde;
|
|
}
|
|
anzeigeAktualisieren();
|
|
}
|
|
|
|
/**
|
|
* Liefere die aktuelle Uhrzeit dieser Uhrenanzeige im Format SS:MM.
|
|
*/
|
|
public String gibUhrzeit()
|
|
{
|
|
return zeitanzeige;
|
|
}
|
|
|
|
/**
|
|
* Aktualisiere die interne Zeichenkette, die die Zeitanzeige haelt.
|
|
*/
|
|
private void anzeigeAktualisieren()
|
|
{
|
|
if(stundenWert < 16) {
|
|
zeitanzeige = "0" + Integer.toHexString(stundenWert);
|
|
}
|
|
else {
|
|
zeitanzeige = "" + Integer.toHexString(stundenWert);
|
|
}
|
|
zeitanzeige = zeitanzeige + ":";
|
|
if(minutenWert < 16) {
|
|
zeitanzeige = zeitanzeige + "0" + Integer.toHexString(minutenWert);
|
|
}
|
|
else {
|
|
zeitanzeige = zeitanzeige + Integer.toHexString(minutenWert);
|
|
}
|
|
zeitanzeige = zeitanzeige + ":";
|
|
if(sekundenWert < 16) {
|
|
zeitanzeige = zeitanzeige + "0" + Integer.toHexString(sekundenWert);
|
|
}
|
|
else {
|
|
zeitanzeige = zeitanzeige + Integer.toHexString(sekundenWert);
|
|
}
|
|
}
|
|
}
|