web-dev-qa-db-ja.com

.pack()は何をしますか?

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()をコメントアウトすると、なぜコードが機能しないのか疑問に思います

34
Computernerd

packメソッドは、すべてのコンテンツが推奨サイズ以上になるようにフレームのサイズを調整します。 packの代わりに、setSizeまたはsetBounds(フレームの位置も設定する)を呼び出してフレームサイズを明示的に確立することもできます。通常、packはフレームサイズをフレームレイアウトマネージャーに任せ、レイアウトマネージャーはプラットフォームの依存関係やコンポーネントサイズに影響する他の要因の調整に優れているため、setSizeを呼び出すよりもpackを使用することをお勧めします。

Javaチュートリアル から

Java AP​​Iに関する追加情報が必要な場合は、 Javadocs も参照する必要があります。

50
sidgate