2014-04-10 91 views
28

我正在学习有关的JPanel和网格布局,这个代码片段将生成一个简单的JPanel有6个按钮.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); 

    } 

} 

我很奇怪,为什么我的代码,难道不工作,如果我注释掉jf.pack()

+7

其他信息在[的javadoc]看看(http://docs.oracle.com/javase /8/docs/api/java/awt/Window.html#pack) – robertoia

+7

这个问题似乎是无关紧要的,因为它是关于通过a)查阅文档b)尝试一个简单的代码实验很容易解决的问题。 –

+0

'this.setPreferredSize(new Dimension(500,500));'请参阅[我应该避免使用Java Swing中的set(Preferred | Maximum | Minimum)Size方法吗?](http://stackoverflow.com/q/7229226/ 418556)(是) –

回答

35

Pack方法调整框架的大小以使其所有内容达到或超过其首选大小。 pack的一个替代方法是通过调用setSize或setBounds(它也设置帧的位置)来显式地建立一个帧的大小。一般来说,使用包比调用setSize更好,因为包离开了框架布局管理器负责框架大小,并且布局管理器善于调整平台依赖性和影响组件大小的其他因素。

Java tutorial

你也应该参考Javadocs任何时候你需要在任何Java API

+3

为什么他们称之为'pack'? – Ninjaxor

+2

因为它将组件紧密地包装在一起。 –