使用布局管理器时,永远不要使用setSize()。布局管理器的工作是确定大小。您可以通过设置指定的大小或最小或最大大小来向布局管理器提供提示。但是,不建议您执行此操作,因为组件和面板应以其首选尺寸显示,该尺寸由您使用的布局管理器确定。如果您确实覆盖了大小,则代码应为:
// enrol.setSize(new Dimension(400, 200));enrol.setPreferredSize(new Dimension(400, 200));
但是,这仍然无法按您想要的方式工作,因为CardLayout的工作是确定使用CardLayout添加到面板中的所有面板的最大尺寸。因此,当您从一个面板交换到另一个面板时,不会得到每个单独面板的大小。对于用户而言,这是更好的体验,因为用户不想每次单击按钮时都看到帧大小不断变化。
如果您确实希望每次单击按钮时都具有帧更改大小,则基本代码为:
mainPanel.remove(oldPanel);mainPanel.add(newPanel);frame.pack();
然后,主面板的布局管理器将观察新添加的面板的首选大小。



