© APSIS GmbH extern.gif (1249 Byte), Polling, 2000


Kreis

Statischer Datenbehälter aus der Bibliothek für das Lehrbuch Programmieren mit Java

Dokumentation Programmtext mit Dokumentation


package lehrbuch;
public class Kreis {
        public final static Farbe ROT = Farbe.ROT;
        public final static Farbe GRUEN = Farbe.GRUEN;
        public final static Farbe BLAU = Farbe.BLAU;
        public static Farbe rot() {
                return ROT;
        }
        public static Farbe gruen() {
                return GRUEN;
        }
        public static Farbe blau() {
                return BLAU;
        }
        public Kreis() {
                kreisSichtbar = false;
                kreisFarbig = false;
                kreisPos = UNSICHTBAR;
        }
        public Kreis(final Farbe farbe) { 
                this();
                zeichnen();
                bemalen(farbe);
        }
        public void zeichnen() throws MehrAlsNeunFehler {
                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
        }
        public class MehrAlsNeunFehler extends Error {}
        public void bemalen() {
                try {
                        naechsteFarbe = (Farbe)naechsteFarbe.naechster();
                }
                catch (BereichAusnahme ausnahme) {
                        naechsteFarbe = (Farbe)naechsteFarbe.erster();
                }
                bemalen(naechsteFarbe);
        }
        public void bemalen(final Farbe farbe) { 
                kreisFarbig = true;
                kreisFarbe = farbe;
                if (kreisSichtbar)
                        Anim.kreisZeichnen(kreisPos, kreisFarbe.pos());
        }
        public void verstecken() {
                kreisSichtbar = false;
                Anim.kreisVerstecken(kreisPos);
        }
        public void wiederherstellen() {
                if (kreisPos != UNSICHTBAR) {
                        kreisSichtbar = true;
                        if (kreisFarbig)
                                Anim.kreisZeichnen(kreisPos, kreisFarbe.pos());
                        else
                                Anim.kreisZeichnen(kreisPos);
                }
        }
        // Informator
        public Farbe inhalt() throws KeineFarbe { // Ergebnis: ROT, GRUEN oder BLAU
                if (kreisFarbig)
                        return kreisFarbe;
                else
                        throw new KeineFarbe();
        }
        // Kommunikationsmethoden:
        public static void meldung(final String text) {
                Anim.meldung(text);
        }
        public void farbWahl() {
                Farbe farbe = ROT;
                farbe = (Farbe)farbe.auswahl();
                bemalen(farbe);
        }
        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;
}
package lehrbuch;
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 extern.gif (1249 Byte), Polling, 2000