ControlBar

Die ControlBar besteht aus zwei Teilen, nämlich einem, der den Modus anzeigt, und einem, der die Werte der jeweils aktuellen Figur anzeigt. Ich kapselte diesen Umstand in zwei Klassen (ModusPanel und ValuePanel). Während im ModusPanel lediglich der Text gewechselt werden muß, müssen im ValuePanel bei einem Wechsel des Modus' völlig verschiedene Daten angezeigt werden. Daher bekam das ValuePanel ein CardLayout mit drei verschiedenen auf die jeweils angezeigte Figur spezialisierten Subklassen von ControlPanel und einem leeren Panel für den Auswahlmodus. Wenn nun der Modus des CAD gewechselt wird, so meldet es dies dem ControlBar (mit ControlBar.setFigur(Figur)), dieses aktualisiert nun seine beiden Komponenten: das ModusPanel setzt den String seines Labels auf den Modus, das ValuePanel zeigt das passende ControlPanel an.

 

ControlPanel

Für die Anzeige der Werte der Figuren gibt es mehrere Klassen. Die Grundklasse ist das ControlPanel, seinerseits eine Subklasse von Panel. Das ControlPanel kapselt die Werte, die jede Figur hat: eine (Rand)Farbe und einen Mittelpunkt. Ebenso wie Figur ist ControlPanel eine abstrakte Klasse, da es nicht dazu kommt, daß eine reine Figur angezeigt wird. Für die drei spezialisierten Figuren gibt es die drei speziellen ControlPanels StreckeControlPanel, RechteckControlPanel und KreisControlPanel; sie kommen im ValuePanel zum Einsatz.

Wenn einer der Werte in einem solchen ControlPanel geändert wird, dann ruft die überladene action()-Methode jeweils die das spezielle Datum behandelnde Methode auf. Diese ruft die korrespondierende Setzmethode der gerade aktuellen Figur mit dem neuen Wert auf. Die anzeigende Komponente überprüft selbst, ob der Wert in Ordnung ist (s.u.), andernfalls wird die Figur nicht gesetzt.

 

Spezielle Komponenten

Für die Farbauswahlen gibt es die Klasse ColorChoice, die von Choice abgeleitet ist, sie ermöglicht das Auswählen aus den in Color gespeicherten Farben.

Für die Eingabe von Zahlenwerten gibt es das von TextField abgeleitete NumberTextField, das nur Eingeben von Zahlen bis zu einem bestimmten Maximum erlaubt. Wird das Eingeben von höheren Zahlen versucht, springt es zurück auf den alten Wert. Dies wird durch ein Überladen der action()-Methode erreicht: wenn ein NumberTextField ein Event auslöst, prüft es den angezeigten Wert, ist dieser korrekt, wird false zurückgegeben, damit das Event normal behandelt wird; andernfalls wird der Wert auf den letzten korrekten Wert gesetzt und das Event nicht weitergereicht.

Für das Eingeben von Punkten gibt es das PunktTextField (abgeleitet von Panel), das den Namen und die Koordinaten eines Punktes anzeigt. Es bedient sich dazu auch dem NumberTextField.

ControlBar.java

public ControlBar(CAD, Figur)

Es wird ein ControlBar erzeugt, das ein ValuePanel und ModusPanel enthält. Farben, Schriftsatz und Layout werden gesetzt, dann die übergebene Figur angezeigt. Es fügt sich selbst ins übergebene CAD ein.

public void setFigur(Figur)

Die Figur wird an die Anzeigepanels weitergegeben (ModusPanel, ValuePanel), damit diese sie anzeigen.

 

ModusPanel.java

public ModusPanel()

Ein neues ModusPanel erzeugen, das Label enthält

public void setFigur(Figur)

Guckt im parent (dem ControlBar) nach, um an das Eltern-CAD zu kommen um aus diesem nach dem aktuellen Typ zu Fragen. Je nachdem welcher Konstante er gleicht, wird der Text des Labels gesetzt.

 

ValuePanel.java

public ValuePanel()

Das neue ValuePanel besitzt ein CardLayout, um jeweils den Typ der Figur darstellen zu können. Zu diesem Zweck wird je ein StreckenControlPanel, ein RechteckControlPanel und ein KreisControlPanel eingefügt. Weiterhin wird für den AuswahlModus ein leeres Panel hinzugefügt.

public setFigur(Figur)

Je nachdem, in welchem Modus das CAD ist (siehe ModusPanel.setFigur) wird das jeweils zur aktuellen Figur passende ControlPanel mit setFigur() aktualisiert und angezeigt, oder im Auswahlmodus ein leeres Panel.

 

ControlPanel.java

(gilt auch für Strecke-, Rechteck-, KreisControlPanel; allerdings mit anderen Klassendaten)

public ControlPanel()

Im ControlPanel werden die Randfarbe und der Mittelpunkt angezeigt, hierzu werden im Konstruktor ein PunktTextField und ein ColorChoice eingefügt.

public void setFigur(Figur)

Die Figur wird im Klassendatum figur gespeichert, dann werden die Anzeigekomponenten aktualisiert.

public boolean action(Event, Object)

Je nachdem wie das target des übergebenen Events aussieht, wird die jeweilige handle() Methode mit dem Object aufgerufen.

private boolean handleXXX()

XXX steht hier für die Werte der Figur; es wird die jeweilige set()-Methode aufgerufen. Im abstrakten Grund-ControlPanel sind das der Mittelpunkt und die (Rand-) Farbe.

 

NumberTextField.java

public NumberTextField(String, int, int)

public NumberTextField(int, int)

Ein NumberTextField enthält und zeigt eine Zahl an. Sie darf ein gesetztes Maximum nicht überschreiten.

public void setText(String)

Der übergebene Text (eine Zahl!) wird angezeigt, wenn das Maximum nicht überschritten wird; in der Klassenvariable 'alterText' wird er in diesem Fall gespeichert. Sie enthält immer die letzte korrekte Zahl. Falls der übergebene Text nicht in Ordnung ist, wird wieder der alte Text angezeigt.

public boolean action(Event, Object)

Wenn das Event von diesem Objekt ausgelöst wurde, wird die neu eingegeben Zahl überprüft, wenn sie nicht die richtige Größe hat, wird wieder der alte, korrekte Text angezeigt. Dann wird 'true' zurückgegeben; andernfalls wird false zurückgegeben, damit die jeweiligen, ein NumberTextField enthaltenden Objekte die Eingabe enthalten.

private boolean richtigeGröße(String)

Wenn der Integer-wert des übergebenen Strings größer als das Maximum, oder kleiner als 0 ist wird 'false' zurückgegeben. Sonst 'true'. Die Exception, daß der eingegebene Text kein Integer ist braucht nicht abgefangen zu werden, da in dem Fall, daß Text eingeben wird, der keine Zahl darstellt nicht passiert, und ja auch nicht passieren soll.

 

PunktTextField.java

public PunktTextField(String)

Ein PunktTextField enthält die Komponenten um die Werte eines Punktes anzuzeigen, außerdem, wird der übergebene String als Name angezeigt.

public void setPoint(Point)

Den beiden Textfeldern, die die Koordinaten anzeigen, werden die Werte des neuen Punktes als String übergeben.

public Point getPoint()

Es wird ein Punkt zurückgegeben, der aus den Werten der Strings, die in den Textfeldern stehen neu erzeugt wird.

 

ColorChoice.java

public ColorChoice(Color)

public ColorChoice()

Es wird ein neues Auswahlmenu erstellt, das einen Eintrag für jede in java.awt.Color angegebene Farbe enthält. Es wird die übergebene Farbe(!) angezeigt.

public static Color toColor(String)

Eine statische Methode, die den Farbwert eines String zurückgibt.

public void select(Color)

Wählt die übergebene Farbe im Choice aus.