.pack()做什么?

我正在学习JPanel和GridLayout,这段代码将产生一个简单的6个button的JPanel

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

我想知道为什么我的代码不会工作,如果我注释掉jf.pack()

包装方法的大小框架,使其所有的内容是在他们的首选大小或以上。 pack的另一种select是通过调用setSize或setBounds(它也设置帧的位置)来显式地build立一个帧的大小。 一般来说,使用包比调用setSize更好,因为包离开了框架布局pipe理器来负责框架大小,而布局pipe理器则善于调整平台依赖性和影响组件大小的其他因素。

从Java教程

任何时候您都需要参考Javadocs,以获得有关任何Java API的更多信息