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