Swing und MVC: Bsp.
Verallgemeinerung durch Abstrakte Klassen
Damit man beliebige Varianten von Model- und Komponentenklassen bequem erzeugen kann, wird der Kernbestand dieser Klassen in Abstrakten Klassen zusammengefasst. Von diesen werden die gewünschten Klassen abgeleitet, indem nur noch die spezifische Logik der konkreten Klasse implementiert wird.
Das Model zum Aufzählen der Wochentage Mo..So sieht also folgendermassen aus:
/*
* Klasse mvc.TagModel
*
* Version 1.0
*
* 9.6.01
*
* www.AndreasGoedel.de
*
*/
package mvc;
/**
* Model mit Namen der Wochentage Mon..So.
*
*/
public class TagModel extends AbstractZaehlerModel{
/* Array der Tage im Model */
private String tage[] = {"Mon", "Die", "Mi", "Do", "Fr", "Sa", "So" };
/**
* Konstruktor.
* Setzt min, max, val und incstep.
*/
public TagModel(){
min = 0;
max = 6;
incstep = 1;
val = min;
}
/**
* Den Wert als Objekt bringen.
* Zur Weiterverarbeitung downcast o.ä. erforderlich.
*/
public Object getValue(){
return tage[val];
}
}
Der Zusammenhang aller Klassen und Interfaces ist wie folgt:
- ZaehlerChangeListener: ListenerInterface.
- AbstractZaehler: Abstrakte Komponente .
- ButtonZaehler: Komponente mit JButtons und Model.
- SliderZaehler: Komponente mit JSlider und 2 Modellen.
- ZaehlerModel: Model Interface.
- AbstractZaehlerModel: allg. Model-Eigenschaften und Methoden.
- DefaultZaehlerModel: Model mit Zahlen -32000..32000
- ZahlModel: Model mit Zahlen 0..24.
- TagModel: Model mit Namen der Wochentage Mon..So.
- LogarModel: Model bringt 10er Potenzen 0.0001 .. 10000
- ZaehlerChangeEvent: Zusatzinformationen über EventSource.
- MVCDemo: Hauptklasse MVC-Demo.
Verallgemeinerte Zaehler
Das Demo zeigt Zaehler mit 3 unterschiedlichen Modellen:
- Klasse ZahlModel: Zahlen 1..24
- Klasse TagModel: WochenTage Mon..So
- Klasse LogarModel: 10er Logarithmen 0.0001..10000
und zwar jeweils als JFrame
- Klasse ButtonZaehler: mit JButtons
- Klasse SliderZaehler: mit JSlider
zum rauf- und runterzählen, insgesamt also 6 Demos. Die 2 Zaehler-Klassen sind als Ableitungen der Klasse AbstractZaehler implementiert, die 3 Model-Klassen als Ableitungen von AbstractZaehlerModel. Es gibt eine 4te Model-Klasse DefaultZaehlerModel, die man als 0815-Zaehler einsetzen kann ( hier nicht eingesetzt ).
Die folgenden 6 Konstruktor-Aufrufe in der Klasse MVCDemo erzeugen also die 6 Demos:
new ButtonZaehler( new ZahlModel())
new ButtonZaehler( new TagModel())
new ButtonZaehler( new LogarModel())
new SliderZaehler( new ZahlModel())
new SliderZaehler( new TagModel())
new SliderZaehler( new LogarModel())
Literaturhinweis:
John D. Mitchell, Implement callback routines in Java
Amy Fowler, A Swing Architecture Overview