Labo GUI's 09-10: Java Swing reeks 2
Labo GUI's 09-10: Java Swing reeks 2
Klokken
Klokken (of uurwerken) zijn interessant om de scheiding tussen logica en presentatie
te demonstreren.
Er zijn meerdere views mogelijk, bv. een digitale klok of een analoge.
Er zijn ook meerdere manieren om de tijd (cijfers of wijzers) aan te sturen:
je kunt het huidige tijdstip tonen of het tijdstip van een alarm, je kunt
de klok als chronometer gebruiken of als timer.
We gebruiken het MVC-model (Model-View-Controller). De tijd wordt bijgehouden in het model,
de grafische weergaven zijn views, en de verandering van tijd wordt geregeld door
controllers.
Maak een interface model.TijdLuisteraar met methode
void modelGewijzigd()
Maak een klasse model.TijdModel met attributen
uren: int
minuten: int
seconden: int
honderdsten: int
luisteraars: een verzameling TijdLuisteraars.
Deze klasse is enkel een data-holder, en bevat dus geen timer!
Voorzie getters en setters en methodes om luisteraars toe te voegen en te verwijderen.
Maak een methode
void verwittigLuisteraar()
die alle luisteraars verwittigt (via modelGewijzigd) als de tijd veranderd is.
Elke klok-view (analoge klok, digitale klok) is een TijdLuisteraar.
Zet je analoge en digitale klok (vorige oefeningen) in package view,
en pas ze aan zodat ze gebruik maken van een TijdModel
(dat meegegeven wordt aan de constructor, of ingesteld via een setModel-methode).
Deze klassen bevatten dus geen timer!
Merk op dat de koppeling tussen model en views (een 1-op-veel-relatie) bidirectioneel is.
Zorg ervoor dat dit altijd consistent blijft!
Maak in package controller controllerklassen:
HuidigeTijdController: stelt de tijd in op de huidige tijd.
ChronoController: start vanaf nul.
TimerController: telt af van een bepaalde beginwaarde.
Elke controller stuurt een model aan. Het model zal zelf zijn luisteraars
op de hoogte brengen als de tijd gewijzigd is.
Maak een GUI waarmee je dit kunt testen. Toon dezelfde tijd via op een analoge en op een digitale klok.
Je kunt bv. met radio-buttons de huidige controller kiezen. Ofwel via tabbladen...
Instelbare tijd
Het wordt nog interessanter als je de tijd ook kunt instellen via een view.
Maak een instelbare digitale klok, waarvan je de uren, minuten, seconden (en honderdsten)
kunt instellen via JSpinners.
Maak een versie van de analoge klok waarvan de wijzers versleepbaar zijn.
Opm. in principe moeten in het MVC-model de views de tijdswijzigingen doorgeven
aan de controller. Die kan dan bepaalde acties ondernemen (zoals validatie: controleren
of de waarden geldig zijn), en zonodig het model aanpassen, dat op zijn beurt
de views op de hoogte brengt.
In ons geval kun je er echter voor kiezen om het model rechtstreeks aan te passen.
|