Triple Eye Industrieel Ingenieur Informatica Algemeen Intranet Tweede jaar INWE Programmeren van GUI's GUI's Java
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.


  • W. Schepens 07/11/2008

    Welkom | Hogeschool Gent | INWE | Studentenserver | Docentenserver | Intranet