首页 文章

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

提问于
浏览
-2

我在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 回答

  • 1

    CardLayout能够调整其容器的大小,使其适合已添加到其中的任何组件的最大首选大小,因此这是您应该使用的 . 您需要解决的问题是当前组件卡首选大小不能按您的意愿工作 . 发生这种情况的最常见原因是由于使用了空布局和绝对定位,并且如果你're using this in any of your card component JPanels then don' t . 此外,如果您需要更多直接控制首选大小,您可能需要在任何行为不当的卡组件JPanel上覆盖 getPreferredSize() . 我经常这样做,如果我的JPanel在paintComponent方法中显示一个图像,我希望我的JPanel足够大,可以做到这一点 .

    要获得更好的帮助,请考虑为您的问题创建和发布SSCCE .

相关问题