今天写了一个小程序,发现JFrame在不设置大小的情况下长宽都是零,不能根据里面的子控件调剂自己的大小。于是在网上查了一下,得到是pack()函数:先设置子控件的最有大小,然后显示JFrame,最后调用pack()就可以保证JFrame的大小是自适应自子控件的。最后要是禁止JFrame改变大小,应该在显示前设置。
测试代码如下:
public static void main(String[] args) {
JFrame aframe=new JFrame();
JToolBar toolBar = new JToolBar();
aframe.getContentPane().add(toolBar, BorderLayout.NORTH);
toolBar.setPreferredSize(new Dimension(100,30));//1.设置最优大小
JButton button = new JButton();
button.setText("New JButton");
toolBar.add(button);
JPanel panel = new JPanel();
panel.setBorder(new MatteBorder(5,5,5,5,Color.red));
aframe.getContentPane().add(panel, BorderLayout.CENTER);
panel.setPreferredSize(new Dimension(100,100));//1.设置最优大小
aframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
aframe.setResizable(false); //禁止改变大小在调用显示之前
aframe.setVisible(true);//2显示JFrame
aframe.pack();//3调用pack()适应子控件大小
}
执行pack和没有执行pack的对比如下图: