如何为自定义类创建2d arrayobject

时间:2015-09-19 07:25:05

标签: java multidimensional-array nullpointerexception jframe jbutton

我有一个名为ButtonList的自定义类,就像一个按钮列表,我将所有进入窗口的按钮添加到按钮列表的2d数组对象中。

ButtonList[][] buttonList;
buttonList = new ButtonList[5][3];

我正在尝试添加时,我不断收到Null指针错误 JButtons到buttonList。

this.buttonList[column][row].addButton(buttonImage);

ButtonList和addButton方法如下所示:

static class ButtonList{
    int column = 0;
    int row = 0;
    JButton[][] arrayButton = new JButton[this.column][this.row];

    void addButton(JButton BUTTON){ 
        arrayButton[this.column][this.row] = BUTTON;
        System.out.println("Row: " + this.row + " Column: " + this.column);
        this.column += 1;
        this.row += 1;
        System.out.println("button inserted at " + this.row);
    }//end addButton

我做错了什么? 感谢

2 个答案:

答案 0 :(得分:0)

        int column = 0;
        int row = 0;
        JButton[][] arrayButton = new JButton[this.column][this.row];

在调用构造函数之前初始化数组。所以此时你的列和行仍为0.然后初始化一个[0] [0]的数组。这就是为什么稍后你会得到一个空指针异常的原因,即使你可能在构造函数中更改了行和列的值,或者稍后在任何方法中也是如此。但在创作时他们是0。 而且

           arrayButton[this.column][this.row] = BUTTON;

这很可能会给你一个超出范围的异常,因为java中的数组是0索引的,所以你的有效范围来自[0,column-1] [0,row-1]所以你可能想要修复它好。

答案 1 :(得分:0)

JButton[][] arrayButton = new JButton[this.column][this.row];

这一行创建一个2d数组(没有初始化),并且实际上相当于:

JButton[][] arrayButton = new JButton[0][0];

0恰好是当时列和行的值。更改这两个变量的值不会对它自己的数组产生任何影响。

解决方案:    如果事先知道列和行的最大值,请使用该值创建数组。如果没有,请使用ArrayList,以后可以更改大小。