初始化 JButton 网格并将它们添加到 JFrame

Initializing a grid of JButton and adding them to a JFrame

我正在尝试编写一个在 JFrame 中播放 Yahtzee 的程序。我们的老师有一种我们应该编写的方法,它涉及将 ConfigurationButtons - 一个扩展 JButton 的 class - 添加到 JFFrame。这是我到目前为止的代码:

builder= new PlayerPanel();

manager = new JFrame("Yahtzee!");
manager.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
manager.setLayout(new GridLayout(TOTAL, numPlayers));
manager.add(builder);
//manager.add(howManyPlayers);
manager.setSize(1200,600);
manager.setVisible(true);

private class PlayerPanel extends JPanel
{
    private final int ROWS = 18;
    private JLabel[]titles;
    private PlayerPanel()
    {
        for(int j=0;j<numPlayers;j++)
        {
            for(int i=0;i<ROWS;i++)
            {
                fields[i][j]=new ConfigurationButton(i,j);
                manager.add(fields[i][j]);
            }
        }
    }

我尝试实施 this 解决方案,但它没有用 - 我得到的只是一个空白的 JFrame。

好的,填写你的 JFrame,看看我用下面的代码做了什么,并将它应用到你的情况。

JFrame manager = new JFrame("Manager");
JPanel panel = new JPanel(new GridLayout(10, 10));

for(int i = 0; i < 10; i++)
{
    for(int j = 0; j < 10; j++)
    {
        JButton button = new JButton(i + " - " + j);

        button.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                ((JButton)(e.getSource())).setText("Clicked");
            }
        });

        panel.add(button);
    }
}

manager.add(panel);
manager.setSize(750, 750);
manager.setVisible(true);

注意面板是如何在 GridLayout 中设置的(正如您所做的那样),但面板随后会添加到 JFrame。

您应该能够基于此示例构建您的面板,并在必要时替换您的自定义组件。