Pregunta

Estoy tratando de construir una ventana de interfaz gráfica de usuario en mi solicitud. Lo que estoy tratando de hacer es tener una ventana, con un par de botones en la parte superior, y un área grande de texto. Algo como esto:

+--------------------------------------------------+
| [button1] [button2]                    [button3] |
| +----------------------------------------------+ |
| | text area                                    | |
| |                                              | |
| |                                              | |
| |                                              | |
| +----------------------------------------------+ |
+--------------------------------------------------+

Estoy casi allí, usando 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)
  );

El problema es que esto termina con button3 alineado a la izquierda, con los otros dos. Me parece que no puede averiguar cómo puedo especificar la alineación en sólo que un botón. Puedo hacer GroupLayout.Alignment.TRAILING en toda la barra de botones, pero que llega a los 3 botones, que tampoco está del todo bien.

¿Cuál es el enfoque correcto? Dado que la alineación sólo se aplica para los grupos paralelos, no creo que tenga un HorizontalGroup con dos grupos secuenciales en que le ayudará?

¿Qué me falta?

¿Fue útil?

Solución

Añadir un vacío en su grupo secuencial. Dejando a su grupo horizontal, como es:

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)
  );

La brecha con los parametros actúa como una "primavera", ocupando todo el espacio disponible.

Otros consejos

Trate de añadir:

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 1, Short.MAX_VALUE)

después de que el segundo botón. El MAX_VALUE hará que la brecha se expanda tanto como sea necesario.

Se desea utilizar addPreferredGap (), que sólo está disponible en grupos secuenciales. El código siguiente le da el diseño deseado.

    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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top