我正在为街机游戏创建一个GUI。它由一个带有一些JPanel和一个JMenu的JFrame组成,如图所示:
我一直在尝试使用BorderLayout,但它没有正确显示面板。我得到的是JMenu正确显示。 [1]调整其宽度以满足其中的按钮。 JPanel [2]几乎完成了屏幕的其余部分。 [3]最后显示为细线。
这是我用来将它们放在适当位置的代码片段:
add(new TopMenu(), BorderLayout.PAGE_START); // JMenu
add(new LeftPanel(), BorderLayout.WEST); // [1]
add(new StatusPanel(), BorderLayout.CENTER); // [2]
add(new GameUI(), BorderLayout.LINE_END); // [3]
欢迎任何可能引发这种行为的建议。
答案 0 :(得分:3)
您始终可以使用自己的布局嵌套JPanels /容器。所以整体布局可以是BorderLayout,BorderLayout.NORTH上的菜单和BorderLayout.EAST一侧的JPanel [1],然后使用另一个BorderLayout或BoxLayout将JPanel嵌套到BorderLayout.CENTER位置并放入另一个两个JPanels进入这个JPanel。例如,这个CENTER JPanel可以使用BorderLayout,它可以在其BorderLayout.NORTH位置保持JPanel [2],在BorderLayout.CENTER位置保存JPanel [3]。
答案 1 :(得分:1)
您的JPanel
必须包含Swing组件,否则当您在JFrame
上调用pack()时,它们会缩小到最小尺寸。
由于您正在制作游戏,因此您需要在JPanel
上设置首选尺寸,并在JFrame
上设置首选尺寸。我假设您要使用JPanel
方法直接绘制至少一个paintComponent
组件。
您可以在 rightPanel 中嵌套 JPanel-2 和 JPanel-3 。您可以将FlowLayout
用于 rightPanel 本身,也可以将 JPanel-1 和 rightPanel 放入JFrame
如果您坚持使用布局管理器来布置3 JPanel
而不嵌套,则必须使用GridBagLayout
。 JPanel-1 将是1列宽2行深。 JPanel-2 将为1列宽1列深。 JPanel-3 将为1列宽1列深。
您仍然需要设置3 JPanel
的首选大小。