为什么我得到java.lang.ArrayIndexOutOfBoundsException

时间:2014-08-14 03:19:27

标签: java jpanel

所以基本上,我试图制作一个144个按钮(12x12)的网格,每行12行,每行12个按钮。

但是,当我尝试运行时,我收到此错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at progrid.me.myname.grid.ProGrid.main(ProGrid.java:23)

以下是代码:

package progrid.me.myname.grid;

import javax.swing.*;

public class ProGrid extends JFrame {   
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public static void main(String[] arguments) {
        JFrame frame = new JFrame(); //Create the frame
        frame.pack();
        frame.setResizable(false);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("My ProGrid remake");
        frame.setSize(300, 300);

        JPanel[] row = new JPanel[12];
    for(int i = 0; i < 12; i++){
        frame.add(row[i]);
            row[i].setBounds(0, i*25, 300, 25);
            row[i].setVisible(true);


            for(int j = 0; i < 12; i++){
                JButton[] button = new JButton[j]; //Make 12 new JButtons (button[0] - button[12]) for each row
                row[i].add(button[j]);
                button[j].setBounds(i*25, 0, 25, 25);
                button[j].setVisible(true);


            }
        }

    }

}

第23行是:

frame.add(row[i]);

这可能意味着这也不起作用:

row[i].add(button[j]);

那么有人能给我一个正确的方向吗? 我不是要求你把代码转发给我,我其实是在努力学习。但是一些帮助会很棒。谢谢!

编辑修复了第一个问题,现在我在行 frame.add(row [i])上得到 java.lang.NullPointerException ;

2 个答案:

答案 0 :(得分:7)

<强>问题:

JPanel[] row = new JPanel[i];

您正在循环的每次迭代中创建一个新的JPanelJButton数组,这会导致ArrayIndexOutOfBoundsException循环的第一次迭代i=0何时执行JPanel[] row = new JPanel[0]; frames.add(row[0]);

<强>溶液

对于两个数组,只在循环外创建一个数组实例,并在循环的每次迭代中更新该实例。以下是JPanel数组的示例:

JPanel[] row = new JPanel[12]; //Make 12 new JPanels (row[0] - row[12])
for(int i = 0; i < row.length; i++){
        frame.add(row[i]);
        row[i].setBounds(0, i*25, 300, 25);
        row[i].setVisible(true);

编辑:

JPanel[] row = new JPanel[12];
    for (int i = 0; i < 12; i++) {
        row[i] = new JPanel();
        frame.add(row[i]);
        row[i].setBounds(0, i * 25, 300, 25);
        row[i].setVisible(true);

        JButton[] button = new JButton[12];
        for (int j = 0; i < 12; i++) {
            button[j] = new JButton();
            row[i].add(button[j]);
            button[j].setBounds(i * 25, 0, 25, 25);
            button[j].setVisible(true);

        }
    }

答案 1 :(得分:0)

行[0]到行[12]将创建13行。排成行[11]