© APSIS GmbH , Polling, 2000
Statischer Datenbehälter aus der Bibliothek für das Lehrbuch Programmieren mit Java
Dokumentation Programmtext ohne Dokumentation
/* * @(#)Kreis.java * Bibliothek für das Lehrbuch in Java * @author Prof. Solymosi, (c): APSIS GmbH * @version 3.0 * @date 28. August 2000 */ package lehrbuch;
/** Datenbehälter "animierter Kreis". Eine Klasse zum Ausprägen. 9 Kreise können am Bildschirm dargestellt werden (Methode "zeichnen"). Sie können (mit Farben) gefärbt werden (Methode "bemalen").
Methoden und Reihenfolgebedingungen: Als erster Aufruf sollte "zeichnen" erfolgen; hierdurch wird dem Kreis eine Position im Fenster zugeordnet. "zeichnen" stellt einen farblosen Kreis dar, auch wenn er vorher bemalt war; "zeichnen" kann jederzeit aufgerufen werden; bleibt aber wirkungslos, wenn der Kreis farblos dargestellt ist. "bemalen" faerbt den Kreis bei jedem Aufruf mit der als Parameter angegebener oder (parameterlos) einer neuen Farbe; als Farben stehen Kreis.ROT, Kreis.GRUEN und Kreis.BLAU zur Verfügung. "verschwinden" macht den Kreis unsichtbar, "wiederherstellen" macht ihn wieder sichtbar (bemalt); "verschwinden" und "wiederherstellen" können im Wechsel aufgerufen werden und sind fehlertolerant. Vor jedem "bemalen" und "wiederherstellen" erscheint ein Meldungsfenster, damit der Wechsel der Darstellung angehalten und so fuer das Auge wahrnehmbar wird. */ public class Kreis {
// öffentliche Konstanten: public final static Farbe ROT = Farbe.ROT; public final static Farbe GRUEN = Farbe.GRUEN; public final static Farbe BLAU = Farbe.BLAU;
/** Wertefunktion @return in den Kreis passender Farbe-Wert ROT */ public static Farbe rot() { return ROT; }
/** Wertefunktion @return in den Kreis passender Farbe-Wert GRUEN */ public static Farbe gruen() { return GRUEN; }
/** Wertefunktion @return in den Kreis passender Farbe-Wert BLAU */ public static Farbe blau() { return BLAU; }
// Konstruktoren: /** Konstruktor für einen unsichtbarer, farbloser Kreis */ public Kreis() { kreisSichtbar = false; kreisFarbig = false; kreisPos = UNSICHTBAR; }
/** Konstruktor für einen sichtbaren, farblosen Kreis */ public Kreis(final Farbe farbe) { this(); zeichnen(); bemalen(farbe); }
// Mutatoren /** Kreis wird gezeichnet, wenn es noch Platz im Fenster gibt. @exception MehrAlsNeunFehler (ungeprüft) wenn schon neun Kreise gezeichnet wurden @see MehrAlsNeunFehler */ public void zeichnen() throws MehrAlsNeunFehler { /** dem Kreis wird eine neue Position am Bildschirm zugeordnet (falls er noch keine hat und falls es noch freie gibt; ansonsten ungeprüfte Ausnahme), und er wird farblos gezeichnet, falls er nicht sichtbar ist */ if (kreisPos == UNSICHTBAR) // neue Position zuordnen if (naechstePos == LETZTE_POSITION) throw new MehrAlsNeunFehler(); else { naechstePos++; kreisPos = naechstePos; } // Kreis hat eine Position if (!kreisSichtbar) { // farblos zeichnen kreisSichtbar = true; Anim.kreisZeichnen(kreisPos); } // wenn sichtbar, passiert nichts }
/** innere ungeprüfte Ausnahme wird ausgelöst, wenn mehr als 9 Kreise gezeichnet werden sollen */ public class MehrAlsNeunFehler extends Error {}
/** der Kreis wird zyklisch mit der nächsten Farbe animiert gefärbt. Falls er sichtbar ist, am Bildschirm animiert @see Kreis#bemalen(Farbe) */ public void bemalen() { try { naechsteFarbe = (Farbe)naechsteFarbe.naechster(); } catch (BereichAusnahme ausnahme) { naechsteFarbe = (Farbe)naechsteFarbe.erster(); } bemalen(naechsteFarbe); }
/** Kreis wird animiert mit gegebener Farbe gefärbt. Falls er sichtbar ist, am Bildschirm animiert @param farbe const die gewünschte Farbe ROT, GRUEN oder BLAU @see Kreis#bemalen() */ public void bemalen(final Farbe farbe) { kreisFarbig = true; kreisFarbe = farbe; if (kreisSichtbar) Anim.kreisZeichnen(kreisPos, kreisFarbe.pos()); }
/** Der Kreis wird unsichtbar. @see Kreis#wiederherstellen */ public void verstecken() { kreisSichtbar = false; Anim.kreisVerstecken(kreisPos); }
/** Der versteckte Kreis wird wieder sichtbar. Wenn er zuvor nicht versteckt war, geschieht nichts @see Kreis#verstecken */ public void wiederherstellen() { if (kreisPos != UNSICHTBAR) { kreisSichtbar = true; if (kreisFarbig) Anim.kreisZeichnen(kreisPos, kreisFarbe.pos()); else Anim.kreisZeichnen(kreisPos); } }
// Informator /** die Farbe des Kreises const @exception KeineFarbe falls er zuvor nicht bemalt wurde @see Kreis#bemalen */ public Farbe inhalt() throws KeineFarbe { // Ergebnis: ROT, GRUEN oder BLAU if (kreisFarbig) return kreisFarbe; else throw new KeineFarbe(); }
// Kommunikationsmethoden: /** Textausgabe im Meldungsfenster. const Beim Aufruf erscheint ein Meldungsfenster. Es muss bestätigt werden. */ public static void meldung(final String text) { Anim.meldung(text); }
/** Auswahlliste einer Farbe für den Kreis. Beim Aufruf erscheint eine Auswahlliste mit ROT, GRUEN und WEIN. Der Kreis wird mit der ausgewählten Farbe bemalt. @see Kreis#farbEingabe */ public void farbWahl() { Farbe farbe = ROT; farbe = (Farbe)farbe.auswahl(); bemalen(farbe); }
/** Eingabefenster einer Farbe für den Kreis. Beim Aufruf erscheint ein Eingabefenster. Wenn nicht "ROT", "GRUEN" oder "BLAU" eingetippt wird, wird farbWahl aufgerufen. Der Kreis wird mit der eingetippten Farbe bemalt. @see Kreis#farbWahl */
public void farbEingabe() { Farbe farbe = ROT; try { farbe = (Farbe)farbe.eingabe( ); } catch (BereichAusnahme ausnahme) { farbe = (Farbe)farbe.auswahl(); } bemalen(farbe); }
// private Teile: // Konstanten: private static final int UNSICHTBAR = 0; // erste Position private static final int OBEN_LINKS = 1; private static final int OBEN_MITTE = 2; private static final int OBEN_RECHTS = 3; private static final int MITTE_LINKS = 4; private static final int MITTE_MITTE = 5; private static final int MITTE_RECHTS = 6; private static final int UNTEN_LINKS = 7; private static final int UNTEN_MITTE = 8; private static final int UNTEN_RECHTS = 9;
private static final int LETZTE_POSITION = UNTEN_RECHTS; // aktualisieren, falls neue Positionen hinzugefügt werden
// Objektkomponenten: private Farbe kreisFarbe; private boolean kreisSichtbar; private boolean kreisFarbig; private int kreisPos; // Position am Bildschirm
// Klassenkomponenten: private static int naechstePos = UNSICHTBAR; // Position des letzten angezeigten Kreises private static Farbe naechsteFarbe = Farbe.ROT; }
/* * @(#)Farbe.java * Bibliothek für das Lehrbuch in Java * @author Prof. Solymosi, (c): APSIS GmbH * @version 1.0 * @date 7. Oktober 1998 */ package lehrbuch; /** Inhalt für einen Datenbehälter implementiert durch die Klasse @see Kreis */
public class Farbe extends Aufz { public static final Farbe ROT = new Farbe(); public static final Farbe GRUEN = new Farbe(); public static final Farbe BLAU = new Farbe(); }
© APSIS GmbH , Polling, 2000