allineamento mista con GroupLayout di Java Swing
-
28-09-2019 - |
Domanda
Sto cercando di costruire una finestra GUI nella mia applicazione. Quello che sto cercando di fare è avere una finestra, con un paio di pulsanti in alto, e una grande area di testo. Qualcosa di simile a questo:
+--------------------------------------------------+
| [button1] [button2] [button3] |
| +----------------------------------------------+ |
| | text area | |
| | | |
| | | |
| | | |
| +----------------------------------------------+ |
+--------------------------------------------------+
Ci sono quasi, utilizzando GroupLayout:
layout.setHorizontalGroup(
layout.createParallelGroup()
.addGroup(layout.createSequentialGroup()
.addComponent(button1)
.addComponent(button2))
.addComponent(closeWindow))
.addComponent(textarea1)
);
layout.setVerticalGroup(
layout.createSequentialGroup()
.addGroup(layout.createParallelGroup()
.addComponent(button1)
.addComponent(button2)
.addComponent(button3))
.addComponent(textarea)
);
Il problema è che questo finisce con button3 allineati a sinistra, con gli altri due. Io non riesco a capire come posso specificare l'allineamento sul proprio questo un pulsante. Posso fare GroupLayout.Alignment.TRAILING su tutta la barra dei pulsanti, ma che colpisce tutti i 3 pulsanti, che è anche non del tutto giusto.
Allora, qual è l'approccio corretto? Dal momento che l'allineamento si applica solo per i gruppi paralleli, non credo che avere un HorizontalGroup con due gruppi sequenziali in esso vi aiuterà?
Che cosa mi manca?
Soluzione
Aggiungi una lacuna nel vostro gruppo sequenziale. Lasciando il tuo gruppo orizzontale è:
layout.setVerticalGroup(
layout.createSequentialGroup()
.addGroup(layout.createParallelGroup()
.addComponent(button1)
.addComponent(button2)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(button3))
.addComponent(textarea)
);
Il divario con tali paramters agisce come una "molla", occupare tutto lo spazio disponibile.
Altri suggerimenti
Prova ad aggiungere:
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 1, Short.MAX_VALUE)
dopo il secondo tasto. Il MAX_VALUE causerà il gap di espandersi quanto necessario.
Si desidera utilizzare addPreferredGap (), che è disponibile solo su gruppi sequenziali. Il codice seguente fornisce il layout desiderato.
layout.setHorizontalGroup(
layout.createParallelGroup()
.addGroup( layout.createSequentialGroup()
.addComponent( button1 )
.addComponent( button2 )
.addPreferredGap( LayoutStyle.ComponentPlacement.RELATED, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE )
.addComponent( button3 ) )
.addComponent( textArea )
);
layout.setVerticalGroup(
layout.createSequentialGroup()
.addGroup( layout.createParallelGroup()
.addComponent( button1 )
.addComponent( button2 )
.addComponent( button3 ) )
.addComponent( textArea )
);