Paola Magillo, Univestita' di Genova, Corso di Interfacce Utente per Informatica, a.a. 2006-2007.

LABORATORIO - INTERFACCE GRAFICHE IN JAVA

[Come usare java in laboratorio]

Contesto generale

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:

  1. prima la realizzazione della parte grafica dell'interfaccia (senza gestione degli eventi)
  2. poi la gestione degli eventi

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

1 - Realizzazione della parte grafica

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.

Scelta dei dispositivi da usare

Nota: e' possibile usare altre etichette che non S5, S1, NN, A1, A5, ZZ (quelle messe sono solo indicative).

Scelta della gerarchia di contenimento e dei layout manager

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.

Che cosa abbiamo ottenuto finora

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).

2 - Gestione degli eventi

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':

  • un action listener separato per ogni bottone che esegue l'operazione del bottone specifico (5 action listener in tutto)
  • un action listener unico che va a vedere quale bottone e' stato azionato e poi decide che fare

    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)

    Abilitazioni e disabilitazioni

    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.

    Ultima finitura

    Mettere anche un window listener per gestire azione di chiusura della finestra da parte dell'utente.