/ / Java Swing: impossibile distribuire i componenti nell'intero JPanel con GridBagLayout - java, swing, jpanel, layout manager, gridbaglayout

Java Swing: impossibile distribuire i componenti nell'intero JPanel con GridBagLayout - java, swing, jpanel, layout manager, gridbaglayout

Sto cercando di implementare un semplice JDialog doveil JPanel superiore ha un GridBagLayout che è composto da 5 coppie di JLabels: di ogni coppia, prima JLabel agisce come un'intestazione mentre il secondo contiene i dati ricevuti da un richiamo del servizio web. Ecco un esempio:

inserisci la descrizione dell'immagine qui

Come puoi vedere, questa finestra è troppo "vuota" controppo spazio Prima di tutto non riesco a capire perché il pannello superiore sia molto più grande del secondo. Infatti, JPanel con il titolo "Risultato" ha anche GridBagLayout mentre il primo pannello si trova nella colonna 0 e nella riga 0, il secondo pannello è nella colonna 0 e nella riga 1.

Quindi, per ogni JLabel, chiamo i seguenti metodi: setMinimumSize (new Dimension (231, 25)) setPreferredSize (new Dimension (231, 25)) setMaximumSize (new Dimension (231, 25))

Inoltre, imposto le ancore per ogni GridBagConstraints associato a ogni JLabel come:

  • GridBagConstraints.FIRST_LINE_START per il rosso;
  • GridBagConstraints.CENTER per il verde;
  • GridBagConstraints.LINE_START per l'arancio;
  • GridBagConstraints.LINE_END per il giallo;
  • GridBagConstraints.LAST_LINE_START per il blu;
  • GridBagConstraints.LAST_LINE_END per il bianco;

Alla fine chiamo anche io setWeightX(1.0); per ogni vincolo. Non so perché l'effetto è questo, e perché c'è così tanto spazio vuoto prima e dopo tutto JLabels. C'è un modo per risolverlo? In modo che il pannello superiore si adatti a tutti i suoi componenti? Non riesco a scrivere alcun codice Java perché il mio team di sviluppo è costretto a usare strane strutture interne dove costruiamo il layout scrivendo un file xml dove ogni tag è un contenitore o un componente con il suo giusto grado di nidificazione e quindi, tramite Reflection API, reale Le classi e i metodi Java sono istanziati e chiamati. In ogni caso, il meccanismo dovrebbe essere lo stesso.

AGGIORNARE

Mille grazie a Kevin Anderson e sono stato in grado di migliorare il layout di JDialog considerevolmente. Inoltre, ho chiamato setWeightY(0.0) per GridBagConstraints sul contenitore del pannello superiore in modo che non diventi troppo grande e ridimensionato ai suoi componenti contenuti.

inserisci la descrizione dell'immagine qui

risposte:

1 per risposta № 1

Le tue etichette sono in due colonne e tutte hannouguale pesoX, quindi GridBagLayout alloca approssimativamente la larghezza uguale a entrambe le colonne. Ma se dai il peso maggioreX, ad esempio 10.0, alle etichette nella seconda colonna, fai in modo che la seconda colonna occupi uno spazio relativamente maggiore rispetto alla prima. Otterrai meno spazio tra le colonne e più nell'estrema destra del pannello.