Alinhamento misto com o grouplayout de Java Swing
-
28-09-2019 - |
Pergunta
Estou tentando construir uma janela da GUI no meu aplicativo. O que estou tentando fazer é ter uma janela, com alguns botões na parte superior e uma grande área de texto. Algo assim:
+--------------------------------------------------+
| [button1] [button2] [button3] |
| +----------------------------------------------+ |
| | text area | |
| | | |
| | | |
| | | |
| +----------------------------------------------+ |
+--------------------------------------------------+
Estou quase lá, usando o 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)
);
O problema é que isso acaba com o Button3 alinhado à esquerda, com os outros dois. Não consigo descobrir como posso especificar o alinhamento apenas nesse botão. Eu posso fazer grouplayout.alignment.TeRaRailing em toda a barra de botões, mas isso atinge todos os 3 botões, o que também não está certo.
Então, qual é a abordagem correta? Como o alinhamento se aplica apenas a grupos paralelos, não acho que ter um grupo horizontal com dois grupos seqüenciais nele ajudará?
o que estou perdendo?
Solução
Adicione uma lacuna no seu grupo seqüencial. Deixando seu grupo horizontal como está:
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)
);
A lacuna com esses parâmetros atua como uma "mola", ocupando todo o espaço disponível.
Outras dicas
Tente adicionar:
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 1, Short.MAX_VALUE)
Após o segundo botão. O max_value fará com que a lacuna expanda o máximo necessário.
Você deseja usar addPreferredGap (), que está disponível apenas em grupos seqüenciais. O código abaixo fornece o layout desejado.
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 )
);