L'obiettivo e' realizzare in Java un dispositivo contatore. La nostra interfaccia sara' costituita da un'unica finestra con il seguente schema:
+------------------------------------+ | +----+ +----+ +----+ +----+ +----+ | | | S5 | | S1 | | NN | | A1 | | A5 | | | +----+ +----+ +----+ +----+ +----+ | | +----+ | | | ZZ | | | +----+ | +------------------------------------+dove:
Procederemo per gradi:
Non occorre consegnare nulla, questo e' solo un esercizio che vi sara' utile per il progetto finale del corso.
Nel PRIMO LABORATORIO ci aspettiamo che facciate tutta la parte 1 e almeno qualcosa della parte 2.
SUGGERIMENTO:
E' molto utile programmare tenendo aperta
a fianco una finestra sul sito con il manuale on-line delle
classi Java:
http://java.sun.com/j2se/1.5/docs/api/index.html
L'obiettivo di questa prima parte e'
solo predisporre l'interfaccia, non di farla funzionare.
Cioe' creare le finestre con la gerarchia di
contenitori intermedi (con relativi layout manager)
e dispositivi, ma non ancora gestire gli eventi nei dispositivi.
La classe Java per una finestra principale e' Frame.
Possiamo organizzare la nostra finestra mediante un layout manager a griglia 2 righe per 5 colonne.
Della riga sopra usiamo tutte e cinque le celle.
Della riga sotto usiamo solo la cella di mezzo. Poiche' non e' permesso "saltare" celle quando si riempie una griglia, bisogna riempire le celle "vuote" con un dispositivo che appaia invisibile e inerte. A questo scopo va bene un'etichetta (classe Java Label) che porti scritta la stringa vuota.
L'interfaccia non gestira' ancora gli eventi, quindi vedrete che agendo per esempio sui bottoni questi vengono illuminati (lo fa Java automaticamente) ma non si ha alcun effetto dal punto di vista dell'applicazione (perche' non ci sono listener collegati).
Riprendiamo ora l'interfaccia e iniziamo a farla funzionare veramente.
Abbiamo bisogno di una variabile che tenga il numero corrente.
Per realizzare questo comportamento serviranno action listener per i bottoni S5, S1, A1, A5, ZZ.
Ci sono varie possibilita':
La prima ipotesi non richiede accorgimenti particolari.
La seconda ipotesi merita una nota: dentro l'implementazione del metodo actionPerformed bisogna andare a vedere quale dei 5 bottoni e' stato azionato (c'e' un metodo della classe Event che ritorna l'oggetto su cui e' avvenuto l'evento, cercatelo)
Notiamo che azionare il bottone ZZ ha senso solo quando il numero corrente, mostrato nel campo di testo, e' non-zero.
Possiamo aggiungere istruzioni per disabilitare il bottone ZZ
quando il numero diventa zero, e riabilitarlo quando diventa non-zero.
Anche questo si fa dentro gli action listener.
Mettere anche un window listener per gestire azione di chiusura della finestra da parte dell'utente.