关于swing,隐藏显示部分面板,动态显示整个窗体大小的大小

想要这样的效果
[img]http://dl.iteye.com/upload/attachment/440779/d7a98e07-be54-3a5f-bf61-3aa62293acaf.png[/img]

[img]http://dl.iteye.com/upload/attachment/440805/628c995e-df78-33ee-a0b5-9fe257736b6b.png[/img]

点击detail按钮,动态显示局部面板,并更改整个窗体的大小.

我是给局部panel用setVisable()来控制动态显示.
然后用this.pack()来动态适应大小.
不过貌似,显示或不显示,大小总在那儿...

请各位了支招....谢谢...

我写了个简单的例子,感觉是可以正常的缩放的呢

[code="java"]public class FrameTest implements ActionListener {
private JPanel northPanel = new JPanel();
private JPanel centerPanel = new JPanel();
private JFrame frame = new JFrame("Test");

public FrameTest() {
    init();
}

private void init() {
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(new BorderLayout());

    JTextField tf = new JTextField();

    JButton btn = new JButton("Detail...");
    btn.addActionListener(this);

    northPanel.add(new JLabel("aaaaaaaaaaaaaaaaaaaaaaaaaaaaa"));
    centerPanel.add(new JLabel("bbbbbbbbbbbbbbbbbbbbbbbbbbbb"));
    centerPanel.setVisible(false);
    frame.add(BorderLayout.NORTH, northPanel);
    frame.add(BorderLayout.CENTER, centerPanel);
    frame.add(BorderLayout.SOUTH, btn);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}

@Override
public void actionPerformed(ActionEvent e) {
    centerPanel.setVisible(!centerPanel.isVisible());
    frame.pack();
}

public static void main(String[] args) {
    new FrameTest();
}

}[/code]

去看 Swing Hacks 书中第39个技巧