LE INTERFACCE UTENTE INTERATTIVE IN JAVA

La volta scorsa abbiamo creato delle interfacce utente con bottoni e menù di selezione, analizzando la gestione degli eventi, ad esempio pressione di un bottone, allo scopo di rendere funzionali tali interfacce.
Per semplificare la spiegazione abbiamo disabilitato il Layout Manager, tramite l'istruzione:

setLayout(null);

In questo modo ogni singolo componente va posizionato manualmente, stabilendo le sue coordinate x,y e la sua grandezza.
L' Abstract Windows Toolkit (AWT) di Java è in grado di posizionare automaticamente i componenti, secondo diverse "regole", se viene abilitato uno dei Layout Manager disponibili. In questo caso, non dovremo specificare nè le coordinate dove posizionare i componenti, nè la loro dimensione: stabilita la dimensione dell'applet che li conterrà, e il tipo di Layout Manager, saranno le regole di quest'ultimo, e l'ordine in cui si sono aggiunti all'applet i singoli componenti, a determinare l'aspetto della nostra interfaccia.
I Layout Manager disponibili sono FlowLayout, BorderLayout, CardLayout, GridLayout e GridBagLayout.
Per attivare un Layout Manager (gestore di disposizione) nella nostra applet, ad esempio un FlowLayout, dobbiamo istanziarne uno (ossia crearne un esemplare) e settarlo come Layout Manager correntemente un uso, il tutto all'interno del metodo init(). Questo si può fare con una sola linea di codice:

setLayout(new FlowLayout());


La classe FlowLayout.

La classe FlowLayout arrangia i componenti da destra a sinistra finché non si arriva a fine linea, dopodiché continua a capo, proprio come fanno gli editor di testo con le parole. In questo caso l'ordine con cui i componenti sono aggiunti all'applet, tramite add(), è fondamentale. Normalmente ogni "riga" di componenti non riempie esattamente la larghezza dell'applet, per cui c'è uno spazio superfluo, che viene per default equamente distribuito tra lato destro e lato sinistro, centrando la fila di componenti.
E' possibile decidere di allineare a destra o a sinistra i componenti, lasciando gli eventuali spazi superflui tutti nel lato opposto all'allineamento. Per fare ciò occorre specificare nel costruttore una delle 3 costanti: FlowLayout.CENTER, FlowLayout.LEFT o FlowLayout.RIGHT, ossia centro, sinistra o destra.
A sua volta, i componenti mantengono una distanza minima tra loro, che per default è di 3 pixel, la quale può essere variata specificando i nuovi valori di spaziatura orizzontale e verticale nel costruttore del FlowLayout. Vediamo ad esempio come si setta un FlowLayout con allineamento a destra e spaziatura di 5 pixel in orizzontale, e 10 in verticale:

setLayout(new FlowLayout(FlowLayout.RIGHT, 5, 10));

Comunque, se per i nostri scopi va bene l'allineamento al centro e la spaziatura di 3 pixel, possiamo omettere i parametri.
Da notare che se non si mette alcun setLayout(), di default le applet usano il FlowLayout.

Provate il listato 1 per vedere in funzione il FlowLayout. E' preferibile usare l'appletviewer, piuttosto che il browser, almeno è possibile cambiare la grandezza della finestra e vedere come vengono riposizionati i bottoni ogni volta. Eventualmente cambiate anche l'allineamento e la distanza orizzontale e verticale per verificare il comportamento del Layout Manager nei vari casi.


La classe BorderLayout.

Il BorderLayout è molto particolare. Infatti sono definite 5 posizioni, secondo il loro orientamento: nord, sud, est, ovest (i bordi) e il centro. Dato che i 4 componenti che stanno ai bordi mantengono la stessa dimensione (nel caso dei bottoni si tratta della dimensione minima per contenere l'etichetta) e rimangono "attaccati" al loro bordo prefissato, la dimensione della parte centrale è determinata dallo spazio rimanente. La posizione "geografica" dei componenti si indica nel metodo add(), aggiungendo una stringa a scelta tra "North", "South", "East", "West" e "Center".
Potete fare una verifica compilando il listato 3. La gestione degli eventi di qui in avanti non è presente per motivi di sinteticità.


CardLayout, GridLayout e GridBagLayout.

Il CardLayout è piuttosto particolare, in quanto i componenti non sono visualizzati tutti contemporaneamente, ma come in un mazzo di carte, ossia possono essere visibili o invisibili, in modo da poter far spuntare fuori la carta giusta al momento giusti, come in uno slide di diapositive.
La classe GridLayout dispone i componenti in una griglia, come in una pavimentazione a mattonelle. Basta specificare il numero di righe e colonne, e i componenti saranno posizionati secondo la griglia. Se per esempio abbiamo un'applet larga 300x200, e attiviamo un GridLayout con 4 righe e 3 colonne, avremo dei componenti larghi 100x50. Verifichiamolo compilando il listato 5. Il GridBagLayout permette un maggiore controllo su ogni singolo elemento della griglia, grazie alla classe accessoria GridBagConstraints, che specifica per ogni componente in che maniera occupare la cella (o le celle) della griglia.

Fabio Ciucci
fabioc@anfiteatro.it


Scarica il listato 1: flowlay.java

Scarica il listato 2: flowlay.html

Scarica il listato 3: bordlay.java

Scarica il listato 4: bordlay.html

Scarica il listato 5: gridlay.java

Scarica il listato 6: gridlay.html


Torna all' indice degli articoli