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

时间:2019-03-28 19:17:49

标签: java swing layout-manager grid-layout

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

我指定了行和列的数量(8x8,就像一个真正的棋盘一样),并使用for循环将JPanels添加到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);
    }

我希望这种方法可以创建一个JFrame,其中填充了64个面板(8行8列的正方形框),每个面板都是一种替代颜色。

1 个答案:

答案 0 :(得分:2)

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来说,没关系,但这是个好习惯。

  

颜色不是问题

解决以上问题后,它将成为新问题。我的原始评论解决了这个问题。问题是您决定如何为面板着色的逻辑。