我正在使用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列的正方形框),每个面板都是一种替代颜色。
答案 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来说,没关系,但这是个好习惯。
颜色不是问题
解决以上问题后,它将成为新问题。我的原始评论解决了这个问题。问题是您决定如何为面板着色的逻辑。