2014-04-10 10 views
28

Sto imparando circa JPanel e GridLayout, questo frammento di codice produrrà un semplice JPanel con 6 bottoniCosa fa .pack()?

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 il motivo per cui il mio codice wouldnt funziona se io commento jf.pack()

+7

Date un'occhiata al [javadoc] (http://docs.oracle.com/javase /8/docs/api/java/awt/Window.html#pack) – robertoia

+7

Questa domanda sembra essere off-topic perché si tratta di una questione facilmente risolta da a) consultando la documentazione b) provando un semplice esperimento di codice. –

+0

'this.setPreferredSize (new Dimension (500,500)); vedere [Devo evitare l'uso dei metodi Set (Preferred | Maximum | Minimum) in Java Swing?] (Http://stackoverflow.com/q/7229226/ 418556) (Sì.) –

risposta

35

Il metodo pack taglie 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.

Da Java tutorial

Si dovrebbe anche fare riferimento a Javadocs qualsiasi momento avete bisogno di ulteriori informazioni su qualsiasi API Java

+3

Perché lo chiamano 'pacchetto'? – Ninjaxor

+2

Perché racchiude i componenti da vicino. –