Cosa fa .pack ()?

Sto imparando su JPanel e GridLayout, questo snippet di codice produrrà un semplice JPanel con 6 pulsanti

package testing; import java.io.*; import java.util.*; import java.security.*; import javax.xml.bind.DatatypeConverter; import java.lang.*; import java.awt.*; import javax.swing.*; public class Testing { public static class GridPanel extends JPanel { public GridPanel() { setLayout(new GridLayout(2,3)); setBackground(Color.GREEN); this.setPreferredSize(new Dimension(500,500)); JButton b1 = new JButton ("Button 1"); JButton b2 = new JButton ("Button 2"); JButton b3 = new JButton ("Button 3"); JButton b4 = new JButton ("Button 4"); JButton b5 = new JButton ("Button 5"); JButton b6 = new JButton ("Button 6"); add(b1); add(b2); add(b3); add(b4); add(b5); add(b6); } } public static void main(String[] args) { GridPanel gp = new GridPanel(); JFrame jf = new JFrame(); jf.add(gp); jf.pack(); //code wouldnt work if i comment out this line jf.setVisible(true); } } 

Mi chiedo perché il mio codice non funzionerebbe se commentassi jf.pack()

Il metodo pack dimensiona la cornice in modo che tutti i suoi contenuti siano pari o superiori alle dimensioni preferite. Un’alternativa al pacchetto è di stabilire una dimensione del frame esplicitamente chiamando setSize o setBounds (che imposta anche la posizione del frame). In generale, l’utilizzo del pacchetto è preferibile alla chiamata setSize, poiché il pacchetto lascia il gestore del layout del frame responsabile della dimensione del frame e i gestori del layout sono in grado di adattarsi alle dipendenze della piattaforma e ad altri fattori che influiscono sulle dimensioni del componente.

Dal tutorial di Java

Si dovrebbe anche fare riferimento a Javadocs ogni volta che sono necessarie informazioni aggiuntive su qualsiasi API Java