Java .pack()做什么?

Java .pack()做什么?,java,swing,jpanel,Java,Swing,Jpanel,我正在学习JPanel和GridLayout,这段代码将生成一个带有6个按钮的简单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 Testi

我正在学习JPanel和GridLayout,这段代码将生成一个带有6个按钮的简单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
方法会调整框架的大小,使其所有内容都处于或高于其首选大小,那么为什么我的代码不起作用。pack的另一种方法是通过调用
setSize
setBounds
(这也设置了帧位置)显式地建立帧大小。一般来说,使用pack比调用
setSize
更可取,因为pack让框架布局管理器负责框架大小,而布局管理器擅长根据平台依赖性和影响组件大小的其他因素进行调整


您还应该随时参考有关任何Java API的其他信息。pack()方法是在Java的Window类中定义的,它调整了框架的大小,使其所有内容都达到或超过其首选大小。

查看
this.setPreferredSize(新维度(500500))请参见(是)
jf.pack()//如果我注释掉这一行,代码将不起作用
请确保它能工作,但由于帧的大小为0x0,因此不容易看到它能工作。@Computernerd(我确定有)我在这里缺少关于pack()以及LayoutManager、PreferredSize、getPreferredSize(将JComponents返回到容器)的答案,这一逻辑相当复杂,不可能用简短的回答,而且(看起来)你的问题不好described@Computernerd每个LayoutManager(也是自定义的)都使用min、max和PreferredSize进行不同的处理,对于某些必需的,以及对于某些忽略的,为什么称之为“pack”?因为它将组件紧密地打包在一起。