布局管理器的建议

时间:2012-08-13 16:30:15

标签: java swing alignment border-layout gui-design

我正在为街机游戏创建一个GUI。它由一个带有一些JPanel和一个JMenu的JFrame组成,如图所示:

enter image description here

我一直在尝试使用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]

欢迎任何可能引发这种行为的建议。

2 个答案:

答案 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的首选大小。