【问题标题】:Can I use multiple grids?我可以使用多个网格吗?
【发布时间】:2021-12-04 12:26:13
【问题描述】:

我正在尝试找出这个布局(其余代码处于早期阶段)但是对于这个块,我正在尝试找出最好的(和可行的)格式化它的方法。我希望它是一个 8x8 的网格,我最终将填充宝藏/空按钮,但我还需要顶部的标题以及左侧的一些标签和文本。我不确定我是否能够做多个网格,但我在下面所做的是尝试创建一个 1x2 网格,然后在其中放置另外两个网格,一个带有左侧的信息(3x2),另一个带有 8x8 网格纽扣。我知道它并不接近它所需要的,但是根本没有显示任何网格(它只是放标题,然后放一列有 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);
    }

【问题讨论】:

    标签: java swing jframe layout-manager grid-layout


    【解决方案1】:

    您不能在同一个 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);
    

    【讨论】:

      猜你喜欢
      • 2011-06-07
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-27
      • 2015-10-14
      • 1970-01-01
      • 2019-07-18
      相关资源
      最近更新 更多