2013-12-16 56 views
1

我对Java比较陌生,我正在尝试为学校做一个任务。在我的任务中,我应该制作一个GUI程序,使8×8的红色和黑色彩色棋盘。唯一的问题(到目前为止),我正在初始化一个JPanels的二维数组。使用for循环初始化二维JPanel阵列

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

更改'我<= panel.length'到'我 PakkuDon

+0

我是新来的,我应该知道什么是嵌套循环,但我不,如果我使用'我 retep686

回答

1

三件事:

  1. 一个棋盘是8 × 8,所以你真的想panel.length为8,不是吗?
  2. 标准for回路使用<进行测试,而不是<=
  3. 如果使用两个嵌套的循环,则不需要重复new JPanel() 8次。

结果:

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(); 
    } 
} 
+0

谢谢!效果很好。我利用你的想法来完成它。 – retep686

2

“做一个GUI程序,由8个红色和黑色的方格使得8唯一的问题(到目前为止),我遇到的初始化。 JPanels的二维数组“。

如果你需要做的是使板,没有其他条件,为什么不直接使用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); 
}