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

时间:2017-02-02 14:33:50

标签: java swing layout jframe jpanel

我在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 个答案:

答案 0 :(得分:1)

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

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