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?

Foi útil?

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 )
    );
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top