我可以使用多个网格吗?

Can I use multiple grids?

我正在尝试找出它的布局(其余代码处于早期阶段)但是对于这个块,我正在尝试找出最好(和可行)的方式来格式化它。我希望它是一个 8x8 的网格,我最终会用 treasure/empty 按钮填充它,但我还需要顶部的标题以及左侧的一些标签和文本。我不确定我是否能够做多个网格,但我在下面所做的是尝试创建一个 1x2 网格,然后在里面放置另外两个网格,一个在左侧(3x2)带有信息,另一个带有 8x8 网格用于纽扣。我知道它与它需要的不接近,但是 none 的网格完全显示出来(它只是放置标题,然后是一列 8 行)我想知道我是否在任何某种程度上是正确的轨道,或者如果我现在只是在弥补。任何提示或有关可能嵌套网格的资源将不胜感激?我在我的书中找不到任何关于那个的内容。

private void buildPanel()
    {        
        // Create labels to display the 
        treasuresLeftLabel = new JLabel("Treasures left: ");
        treasuresFoundLabel = new JLabel("Treasures found: ");        
        triesLeftLabel = new JLabel("Tries left: ");
        
        // Create text fields for each label
        treasuresLeftTextField = new JTextField(2);
        treasuresLeftTextField.setEditable(false);
        treasuresLeftTextField.setText(String.valueOf(20-game.getTreasuresFound()));
        treasuresFoundTextField = new JTextField(2);
        treasuresFoundTextField.setEditable(false);
        treasuresFoundTextField.setText(String.valueOf(game.getTreasuresFound()));
        triesLeftTextField = new JTextField(2);
        triesLeftTextField.setEditable(false);
        triesLeftTextField.setText(String.valueOf(game.getTriesLeft()));
        
        emptyButton = new EmptyButton();
        emptyButton.addActionListener(new emptyButtonListener());
        treasureButton = new TreasureButton();
        treasureButton.addActionListener(new treasureButtonListener());

        // new JPanel object referenced by panel
        panel = new JPanel();
        
        panel.setBorder(BorderFactory.createTitledBorder("Treasure Hunt"));
        // Add a gridlayout to the content pane
        panel.setLayout(new GridLayout(1, 2));
        
        panel.setLayout(new GridLayout(3, 2));
        panel.add(treasuresLeftLabel);
        panel.add(treasuresLeftTextField);
        panel.add(treasuresFoundLabel);
        panel.add(treasuresFoundTextField);
        panel.add(triesLeftLabel);
        panel.add(triesLeftTextField);
        
        panel.setLayout(new GridLayout(8, 8));
        panel.add(treasureButton);
        panel.add(emptyButton);
    }

您不能在同一个 JPanel 中使用多个网格 - 一个面板,一个布局管理器。

但是您可以使用嵌套面板来嵌套布局管理器(以及网格)。

例如,您可以为第一个面板使用 BorderLayout(包含顶部的标题、左侧的信息面板和中间的按钮面板。

构建这些面板的代码可能如下所示:

    // panel contains the complete UI
    panel = new JPanel();

    panel.setBorder(BorderFactory.createTitledBorder("Treasure Hunt"));
    panel.setLayout(new BorderLayout());
    panel.add(new JLabel("This is the Title"), BorderLayout.PAGE_START);

    JPanel infoPanel = new JPanel();
    infoPanel.setLayout(new GridLayout(3, 2));
    infoPanel.add(treasuresLeftLabel);
    infoPanel.add(treasuresLeftTextField);
    infoPanel.add(treasuresFoundLabel);
    infoPanel.add(treasuresFoundTextField);
    infoPanel.add(triesLeftLabel);
    infoPanel.add(triesLeftTextField);
    panel.add(infoPanel, BorderLayout.LINE_START);

    JPanel buttonPanel = new JPanel();
    buttonPanel.setLayout(new GridLayout(8, 8));
    buttonPanel.add(treasureButton);
    buttonPanel.add(emptyButton);
    for (int i = 0; i < 62; i++) {
        buttonPanel.add(new JButton(String.format("%02d", i)));
    }
    panel.add(buttonPanel, BorderLayout.CENTER);