import java.awt.*;
import javax.swing.*;
public class Test{
public static void main(String args[]){
TestFrame myFrame = new TestFrame();
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.setVisible(true);    
    }
}
class TestFrame extends JFrame{
public TestFrame(){
JLabel label = new JLabel("hello");
JPanel panel = new JPanel();
JPanel anotherPanel = new AnotherPanel();
panel.add(label);
getContentPane().add(panel,BorderLayout.SOUTH);
getContentPane().add(anotherPanel,BorderLayout.CENTER);
pack();
}
}
class AnotherPanel extends JPanel{
public AnotherPanel(){
setPreferredSize(new Dimension(200,200));
//setSize(200,200);  
}
}
请问,用setSize(200,200);为什么不可以?而用上面那句却可以?

解决方案 »

  1.   

    因为你最后调用了pack()方法,该方法会调用布局管理器对组件大小、位置重新布局,之前的setSize()方法就无效了。
    而setPreferredSize()方法则会告诉布局管理器如果可以的话,请将该组件的大小设为200,200,因此只要设置的大小200,200大于组件的最小尺寸,布局管理器就会使用推荐的尺寸200,200
      

  2.   

    setPreferredSize是布局管理器用的,再做界面的时候为了达到跨平台的目的,需要用 setMaximumSize(Dimension maximumSize) 
    setMinimumSize(Dimension minimumSize) 
    setPreferredSize(Dimension preferredSize)
    这些函数,但是要达到跨平台还是很难的,在绘制控件的时候,布局管理器只是参考以上设置,实际设置由布局管理器决定。你要用setSize要么就把布局管理器设为null。