Java—在具有自己的JPanel的JPanel之间切换,并根据JFrame大小调整这些内部JPanel和组件的大小

Java—在具有自己的JPanel的JPanel之间切换,并根据JFrame大小调整这些内部JPanel和组件的大小,java,swing,layout,jframe,jpanel,Java,Swing,Layout,Jframe,Jpanel,我正在用Java编写程序,我有一些不同布局的JPanel,我想在它们之间切换。在这些JPanel上,我有另一个带有其他组件(如JButtons和JLabel)的JPanel,我想根据JFrame大小调整它们的大小(例如,JPanel上的JPanel的高度等于JFrame内容窗格大小的一半) 我试图制作这些JPanel,并直接将它们删除或添加到JFrame nad中,然后打包、重新验证和重新绘制JFrame,但有时启动程序时JPanel并没有显示出来 我还试着使用CardLayout。我制作了jp

我正在用Java编写程序,我有一些不同布局的JPanel,我想在它们之间切换。在这些JPanel上,我有另一个带有其他组件(如JButtons和JLabel)的JPanel,我想根据JFrame大小调整它们的大小(例如,JPanel上的JPanel的高度等于JFrame内容窗格大小的一半)

我试图制作这些JPanel,并直接将它们删除或添加到JFrame nad中,然后打包、重新验证和重新绘制JFrame,但有时启动程序时JPanel并没有显示出来

我还试着使用CardLayout。我制作了jpanel并将它们添加到JFrame中添加的容器中。切换很好,但我无法在CardLayout容器中调整JPanel和JPanel上的其他组件的大小,因为当我尝试使用JPanel获取JFrame内容窗格的大小或CardLayout容器的大小时,我接收到的宽度和高度等于零

那么,有没有办法做到这一点

如果我写得不明白,我很抱歉。实际上,我想制作一个包含各种场景的游戏,当你点击某个按钮时,它会切换到另一个包含不同组件的场景(jpanel、JButtons、image…)。也许我可以在JFrame中使用一个主JPanel,然后根据场景更改其布局,删除和添加背景图像、JPanel、JButtons等等,但我不知道是否可能,是否不会出现其他问题


感谢您的建议。

CardLayout能够调整其容器的大小,以适合添加到容器中的任何组件的最大首选尺寸,因此这是您应该使用的。您需要解决的问题是,当前的元件卡首选尺寸没有按照您希望的方式工作。出现这种情况最常见的原因是由于使用了空布局和绝对定位,如果您在任何卡组件JPanel中使用这种布局和绝对定位,则不要使用。此外,如果您需要更直接地控制首选大小,则可能需要覆盖任何行为不正常的卡组件JPanel上的
getPreferredSize()
。如果我的JPanel在paintComponent方法中显示图像,我经常这样做,我希望我的JPanel足够大,可以这样做


为了得到更好的帮助,考虑创建和发布您的问题。

我不使用绝对定位,但我只想指定内部组件的大小,例如JPAND上的JPAND,其高度等于JFrice的内容窗格大小的一半,但是在JACTE类的构造函数中不能获得真正的框架大小或内容窗格。(1+)-
JPanel上的JPanel的高度等于JFrame内容窗格大小的一半
-因此,您添加到CardLayout的面板可能是一个具有GridLayout的面板。您尚未发布我们的
SSCCE
,因此我们无法进一步提供帮助。