如何正确地让 GridLayout 产生指定的行数和列数? (创建棋盘)

How to correctly have GridLayout produce the number of rows and columns specified? (Creating a checkerboard)

我正在使用 Java & Swing 创建一个棋盘游戏。为了制作棋盘,我为我的 JFrame 使用了 GridLayout。输出显示不正确。我得到的是 9 列和 7 行 + 一个带有 2 个正方形的额外行。交替颜色有效。

我已经指定了行数和列数(8x8,就像真正的棋盘一样)并使用 for 循环将 JPanel 添加到 JFrame(使用交替颜色)。我试过循环中的迭代次数和网格的大小,但到目前为止还没有奏效。

相关方法:

private void createBoard() {
        f = new JFrame("Checkers");

        for (int i = 0; i <= 64; i++) {
            JPanel panel = new JPanel();
            if (i % 2 == 0) {
                panel.setBackground(Color.LIGHT_GRAY);
            } else {
                panel.setBackground(Color.DARK_GRAY);
            }
            f.add(panel);
        }

        f.setLayout(new GridLayout(8,8));
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        f.setSize(windowSize, windowSize);
        f.setVisible(true);
    }

我希望这种方法能够创建一个包含 64 个面板的 JFrame(方形框架中有 8 行 8 列),每个面板都是不同的颜色。

for (int i = 0; i <= 64; i++) {

您正在添加 65 个面板。

代码应该是:

for (int i = 0; i < 64; i++) {

GridLayout 构造函数未按预期工作:

f.setLayout(new GridLayout(8,8));

代码应该是:

f.setLayout(new GridLayout(0,8));

现在组件到达第 8 列时会自动换行,并根据需要添加尽可能多的行。

此外,通常您会在添加组件之前设置面板的布局。在 GridLayout 的情况下,这无关紧要,但这是一个好习惯。

The colors are not the problem

一旦你解决了上面的问题,它就会成为新的问题。我的原始评论解决了这个问题。问题是您确定如何为面板着色的逻辑。