0

I am trying to build my own "Battleship" game and have problems with swing. I now read endless docs on oracle tutorials on LayoutManagers, but not any of them works as I understand them. They only add a few buttons, but never two individual panels.

        JPanel Background = new JPanel();
    Background.setLayout(new BoxLayout(Background, BoxLayout.X_AXIS));
    panelPlayer = new JPanel();
    panelPlayer.setBorder(BorderFactory.createLineBorder(Color.black));
    panelPlayer.setSize(700, 600);
    // PC Field
    panelPc = new JPanel();
    panelPc.setBorder(BorderFactory.createLineBorder(Color.black));
    panelPc.setSize(700, 600);
    //adding to frame
    getContentPane().add(Background);
    Background.add(panelPlayer);
    Background.add(panelPc);

After that I have a loop thats adds 16x16 buttons in a JButton[] once for every panel.

How to get the two panels to show a table layout? I used GridLayout before, the grid works, but it always takes up the whole space of the frame, not of the Container or Panel or else. The panels are overlapping then. GridBagLayout just puts the buttons in a row and beyond the screen.

4

3 回答 3

0

您可以通过嵌套面板来解决此问题。每个面板都有自己的布局管理器,因此只需将您的 UI 分解为多个部分并为每个部分选择布局管理器。

如果你想要两个并排的面板,那么包含它们的面板应该有一个水平方向的 FlowLayout 管理器。使用 FlowLayout 创建一个面板并将面板添加到其中。

如果每个并排面板都需要按钮网格,则将面板布局设置为 GridLayout 并将按钮放在面板中。这符合我对战舰的记忆;在网格布局中,无论窗口如何调整大小,所有网格元素都保持相同的大小。

那应该让你开始。如果,如我所料,您需要另一个面板,上面有一些游戏控件,请查看 BorderLayout;它在矩形的每个边缘都有一个部分,在中间有另一个部分。使用 BorderLayout 将包含两个网格的面板放在面板的中心,然后您的游戏控件可以进入面板的北部、南部、东部或西部。

祝你好运。如果您有特定问题(在另一个问题中),请告诉我们。

于 2013-04-06T14:19:41.790 回答
0

使用任何布局时不要固定面板的大小。仅当您使用空布局时才有效

您可以使用GridBagLayout实现您的目标。在添加按钮gridx时,gridy正确地指定,它将添加像表格这样的按钮

于 2013-04-06T11:18:33.270 回答
0

只是继续嵌套布局。

在您的情况下,制作一个带有两侧的大块 - 然后在每一侧放置另一个带有网格的面板。

于 2013-04-06T11:20:38.337 回答