Labo GUI 2009-2010 Java Swing reeks 1
Labo GUI Java Swing 2009-2010
Reeks 1
In het tweede deel van het labo zullen we GUIs maken met Java Swing.
Je mag NetBeans gebruiken.
NetBeans heeft een ingebouwde GUI-builder (zoals in Visual Studio), maar die gaan we voorlopig niet gebruiken.
Als je met de hand een GUI maakt krijg je meer inzicht in de werking.
Het is wel aan te raden om gebruik te maken van code completion, refactoring, genereren van constructoren, getters, setters,
debugging enz.
Je kunt veel tijd winnen door het memorizeren van enkele keyboard-shortcuts, zoals ctrl-spatie,
ctrl-r, ctrl-shift-i, ctrl-shift-c, alt-shift-f, ctrl-shift-c, ctrl-b, ctrl-q...
Het is wellicht interessant om een 'tips & tricks'-blad te maken.
Hierop kun je bv. verschillen met VB.NET noteren, of NetBeans-shortcuts,
of typische Java Swing constructies. Dit geldt overigens ook voor andere vakken!
1. Experimenten
A
Maak een zo kort mogelijk programma dat een venster (window) toont.
Schrijf iets naar std-out na het tonen van het venster. Wordt dit uitgevoerd, en is de output te zien? Verklaar...
Geef het venster een titel.
Kun je twee vensters tegelijk openen?
Stel de grootte in op 400x400.
Plaats het venster in het midden van het scherm.
Kun je de achtergrondkleur geel maken?
Bestudeer de klasse Color eens goed.
Probeer ook eens RGB-waarden 180, 230, 255.
B
Voeg een label toe met de beroemde woorden "hello world!".
Wat gebeurt er als je het venster resizet?
Kun je de positie van het label instellen op 20,20 ?
Kun je de grootte instellen op 100x30 ?
Kun je de achtergrondkleur instellen ?
C
Voeg een EtchedBorder toe aan het label. Zie BorderFactory.
Voeg een titel toe aan de EtchedBorder.
Off the record: welke twee design patterns worden er hier gebruikt?
D
Voeg een knop toe en stel zijn positie en grootte in met setBounds().
Maak een hulpklasse Luisteraar (in hetzelfde bestand) die ActionListener
implementeert. NetBeans kan je helpen bij het implementeren van de nodige methode(s), bv. via
het lampje in de linkerkolom.
Reageer op het klikken op de knop door iets uit te schrijven naar std-out.
Reageer op het klikken op de knop door het tonen van een message-dialog (zie JOptionPane)
E
Reageer op het klikken op de knop door een (leeg) dialoogvenster (JDialog) in het midden van het frame te openen.
Reageer op het klikken op de knop door de tekst van het label (zie boven) te wijzigen.
2. Gebruikers
In de experimenten hebben we een JFrame als venster gebruikt.
In de praktijk zal men vaak een klasse afleiden van JFrame en
daar attributen en methodes aan toevoegen.
Het hoofdprogramma is dan niet veel meer dan het aanmaken van een
object van die klasse (hoewel er een addertje onder het gras zit - later meer daarover).
We zullen er ook altijd naar streven om de presentatielaag (view of GUI) zoveel mogelijk te
scheiden van de logicalaag (model). In principe zou het makkelijk moeten
zijn om een bestaand model te koppelen aan een nieuwe presentatielaag
(bv. een console-interface, of een webapplicatie), en - vice versa -
het model te vervangen (bv. door een nieuwe versie).
Nog professioneler is het om een derde component toe te voegen (de controller) die instaat
voor de 'dispatching'. Dit patroon heet MVC (model-view-controller).
Dit alles kan op vele manieren verwezenlijkt worden, in VB.NET of in Java Swing of met andere grafische frameworks. In het begin zullen we gewoon trachten model en view van elkaar te scheiden.
Maak een nieuw project 'Gebruikers'.
Maak een klasse model.Gebruiker met attributen voornaam en naam.
Gebruik NetBeans code-insertion en/of refactoring-tools om de constructor, getters en setters te genereren.
Maak een klasse gui.GUI met als attributen
een ArrayList van gebruikers
een JFrame (dus geen overerving!)
Maak een klasse DemoApp (niet in package) die
een gebruikerslijst maakt, enkele testgebruikers toevoegt, en de GUI start
(geef de gebruikerslijst mee aan de constructor).
Toon de gegevens van 1 gebruiker.
Voorzie knoppen om naar de vorige en volgende te springen.
|