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?

È stato utile?

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 )
    );
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top