.pack() 有啥作用?

Posted

技术标签:

【中文标题】.pack() 有啥作用?【英文标题】:What does .pack() do?.pack() 有什么作用? 【发布时间】:2014-05-23 19:41:52 【问题描述】:

我正在学习 JPanel 和 GridLayout ,这段代码的 sn-p 将生成一个带有 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(),为什么我的代码不起作用

【问题讨论】:

看看javadoc this.setPreferredSize(new Dimension(500,500)); 见Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?(是的。) jf.pack(); //code wouldnt work if i comment out this line 当然可以,但是由于框架的大小为 0x0,所以不容易看到它可以工作。 @Computernerd (我确定在那里)我在这里缺少关于 pack() 以及将 JComponents 返回到容器的 LayoutManager、PreferredSize、getPreferredSize 的答案,这个逻辑是炼金术,不可能回答简而言之,并且(看起来)您的问题描述得不好 @Computernerd 和每个 LayoutManagers(也自定义)处理不同的最小值、最大值和 PreferredSize,对于一些需要,对于一些忽略 【参考方案1】:

pack 方法调整框架大小,使其所有内容都等于或大于它们的首选大小。 pack 的替代方法是通过调用setSizesetBounds(也设置帧位置)显式建立帧大小。一般来说,使用 pack 比调用 setSize 更可取,因为 pack 让框架布局管理器负责框架大小,而布局管理器擅长调整平台依赖性和其他影响组件大小的因素。

来自Java tutorial

如果您需要有关任何 Java API 的更多信息,也应该随时参考Javadocs

【讨论】:

为什么他们称它为“包”? 因为它将组件紧密地打包在一起。【参考方案2】:

pack() 方法在 Java 的 Window 类中定义,它调整框架的大小,使其所有内容都等于或大于它们的首选大小。

【讨论】:

以上是关于.pack() 有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

sigmoid是啥有啥作用,或者有啥功能!

SynchronizationContext 有啥作用?

函数的作用域和类的作用域有啥区别

BluetoothGatt.setCharacteristicNotification() 有啥作用?

并联电阻有啥作用

“@”有啥作用?