PDA

View Full Version : [JAVA] Aiuto con GridLayout. "2 righe che occupano tutto lo spazio"


fbcyborg
13-03-2010, 11:31
Salve a tutti,

non riesco a capire come risolvere il seguente problema.
Ho un JPanel che ha come layout il GridLayout, semplicemente impostato con una colonna ed n righe.
Il fatto è che se il numero delle righe scende al di sotto di un certo numero queste tendono ad occupare sempre più spazio possibile.
Capisco bene che è un comportamento normale ma vorrei evitarlo.
Faccio un esempio.
Se ho un JPanel (in un JScrollPane) 819x615, ed un altro JPanel alto 44 e largo quanto è largo il JPanel contenitore, se imposto un numero di righe per il GridLayout uguale a 20 (ad esempio) e aggiungo al JPanel 20 pannelli alti 44, ognuno di questi pannelli ha la sua altezza originaria (44), ma se scendo sotto una certa soglia questa altezza aumenta. Ad esempio se ne metto solo 2, questi tenderanno a occupare metà spazio per il primo e metà per il secondo.
Come posso fare per fare in modo che ciò non accada?
Ho provato con un sacco di metodi, ad esempio anche a ridimensionare il JPanel contenitore in base a quante righe ci sono moltiplicato per 44, ma non funziona.

EDIT:
Per il momento ho trovato un "trucco". Ho messo 2 pannelli in un JContentPane. Uno a nord e uno al centro. Quello a nord lo uso per metterci i pannellini alti 44, con gridLayout. Quello al centro lo lascio vuoto, per far sì che si espanda fino ad occupare tutto lo spazio possibile. Così ottengo l'effetto desiderato.

banryu79
15-03-2010, 12:06
Hai mai dato un'occhiata alla classe javax.swing.Box?
E in alternativa: il tuo GridLayout a singola colonna e N righe non è che potrebbe comodamente essere espresso usando una JList?

fbcyborg
15-03-2010, 12:42
No non conoscevo javax.swing.Box.
Credo che non sia possibile usare una JList nel mio caso. A me serve una lista di pannelli che contengono JLabel e JButton. Non so se sia possibile fare lo stesso con una JList, ma a occhio direi di no!

banryu79
15-03-2010, 13:22
No non conoscevo javax.swing.Box.
Credo che non sia possibile usare una JList nel mio caso. A me serve una lista di pannelli che contengono JLabel e JButton. Non so se sia possibile fare lo stesso con una JList, ma a occhio direi di no!
Ah, ok. E' che non sapevo quale fosse l'"entità" che popola le tue righe. Allora te la giochi di layout managers, preferred e maximum size dei componenti e finezze/acorgimenti vari.

Box la puoi usare per generare delle "scatole", verticali od orizzontali, in cui incapsulare i tuoi componenti.
Inoltre puoi generare delle aree "di riempimento" (component) a dimensione fissa o a espansione (le "colle") che puoi infilare tra i tuoi componenti per gestirne il layout.

Nel tuo caso potrebbe funzionare un'impostazione del genere:
ogni "riga" che infili nel grid layout è una Box orizzontale [Box.createHorizontalBox()] al cui interno infili il tuo pannello che racchiude tutti i vari componenti, ad esempio.
Comunque per farti un'idea più precisa puoi cercare il tutorial relativo (How to use BoxLayout) nel Really Big Index dei Java Tutorials.

fbcyborg
15-03-2010, 13:24
Ok! :) Grazie per le dritte!