我在Java中编写程序,我有一些不同布局的JPanel,我想在它们之间切换 . 在这些JPanel上我有另外的JPanels与其他组件(如JButtons和JLabels),我想根据JFrame大小调整它们的大小(例如JPanel上的JPanel,其高度等于JFrame内容窗格大小的一半) .
我尝试制作这些JPanel并直接删除或添加到JFrame nad然后打包,重新验证并重新绘制JFrame,但有时JPanels在我启动程序时没有显示 .
我也尝试过使用CardLayout . 我制作了JPanels并将它们添加到JFrame中添加的容器中 . 切换很好但我无法在CardLayout容器中的JPanels上调整JPanels和其他组件的大小,因为当我尝试获取JFrame的内容窗格大小或带有JPanels的CardLayout容器大小时,我将宽度和高度等于零 .
那么,有没有办法实现这一目标?
如果我不可理解地写它,我很抱歉 . 实际上我想制作一个有各种场景的游戏,当你点击某个按钮时,它会切换到另一个具有不同组件的场景(JPanels,JButtons,images ......) . 也许我可以在JFrame中使用一个主要的JPanel,然后根据场景更改其布局并删除并添加背景图像,JPanels,JButton等,但我不知道是否可能以及是否会出现其他问题 .
谢谢你的建议 .
1 回答
CardLayout能够调整其容器的大小,使其适合已添加到其中的任何组件的最大首选大小,因此这是您应该使用的 . 您需要解决的问题是当前组件卡首选大小不能按您的意愿工作 . 发生这种情况的最常见原因是由于使用了空布局和绝对定位,并且如果你're using this in any of your card component JPanels then don' t . 此外,如果您需要更多直接控制首选大小,您可能需要在任何行为不当的卡组件JPanel上覆盖
getPreferredSize()
. 我经常这样做,如果我的JPanel在paintComponent方法中显示一个图像,我希望我的JPanel足够大,可以做到这一点 .要获得更好的帮助,请考虑为您的问题创建和发布SSCCE .