使用for循环初始化二维JPanel数组

时间:2013-12-16 00:27:22

标签: java arrays swing

我对java比较陌生,我正在尝试为学校做作业。在我的任务中,我应该制作一个GUI程序,制作一个8乘8红色和黑色的棋盘格。我唯一的问题(到目前为止)正在初始化JPanel的二维数组。我在使用eclipse时遇到这个错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7

在我尝试运行代码之前,这不会出错。它说错误发生在for循环的主体中:

JPanel[][] panel = new JPanel[7][7];

for (int i = 0; i <= panel.length; i++){
panel[i][0] = new JPanel();
panel[i][1] = new JPanel();
panel[i][2] = new JPanel();
panel[i][3] = new JPanel();
panel[i][4] = new JPanel();
panel[i][5] = new JPanel();
panel[i][6] = new JPanel();
panel[i][7] = new JPanel();
}

如果我不使用for循环但是真的不想放入64个不同的语句,这确实有效。我仔细检查并且panel.length 给出值7(这是我想要的)并且即使我实际放入7也没有工作。我没有任何语法错误是我的代码,但我仍然得到错误。还有其他方法我应该这样做吗?提前致谢。记住我是新手。

2 个答案:

答案 0 :(得分:2)

  

“制作一个GUI程序,制作一个8乘8的红色和黑色棋盘。我遇到的唯一问题(到目前为止)正在初始化一个二维JPanel数组。”

如果您只需要制作电路板而没有其他条件,为什么不使用GridLayout

 JPanel mainPanel = new JPanel(new GridLayout(8, 8));

 for (int i = 0; i < 64; i++){
     JPanel panel = new JPanel();
     // alternate background colors with a predefined boolean and an if
     mainPanel.add(panel);
 } 

答案 1 :(得分:1)

三件事:

  1. 检查板是8×8,所以你真的希望panel.length是8,不是吗?
  2. 标准for循环使用<进行测试,而非<=
  3. 如果您使用两个嵌套循环,则无需重复new JPanel() 8次。
  4. 结果:

    JPanel[][] panel = new JPanel[8][8];
    
    for (int i = 0; i < panel.length; i++) {
        for (int j = 0; j < panel[i].length; j++) {
            panel[i][j] = new JPanel();
        }
    }