0

我想维护一个按钮列表,这些按钮以网格状布局放置在 GUI 中。

我一直在使用 javax.swing.JButton,并创建了我自己的子类,称为 ColoredButton。

我希望它们存储在静态数组列表中,这样我就可以对它们执行相同的功能(设置颜色)。这并不太难。

现在我正在尝试添加额外的功能,在初始化它们时将它们分成 3 种不同类型:角、边缘和中心按钮。问题是,每当我构造这 3 种类型中的一种时,我都想将其添加到 ColoredButton 静态数组列表以及其特定子类型的静态数组列表中。

我已经看到使用“this”作为参数将当前项目添加到列表中不起作用(返回一个空指针,因为“this”不完整)。

因此,我一直在使用工厂式结构。这是我的超类 ColoredButton 及其派生类之一。

public class ColoredButton extends JButton{
    private static ArrayList <ColoredButton> all;

    protected static void addToColored(ColoredButton B){
        all.add(B);
    }

    public static ColoredButton newColoredButton(){
        ColoredButton B = new ColoredButton();
        ColoredButton.all.add(B);
        return B;
    }

    public static void setAll(Color C){
        for(ColoredButton B: ColoredButton.all)
            B.setBackground(C);
    }
}

public class EdgeButton extends ColoredButton {
    private static ArrayList <EdgeButton> all;

    public static EdgeButton newEdgeButton(){
        EdgeButton B = new EdgeButton();
        EdgeButton.all.add(B);
        addToColored(B);
        return B;
    }

    public static void setAll(Color C){
        for(EdgeButton B: EdgeButton.all)
            B.setBackground(C);
    }
}

现在,当我尝试做这样的事情时:

EdgeButton B1 = EdgeButton.newEdgeButton();

我得到一个 NullPointerException。编译器说错误源于这一行:

EdgeButton.all.add(B);

那么我哪里错了?为什么我得到一个空 ptr 异常?

提前致谢!

4

1 回答 1

2

你还没有初始化你的列表。因此,它仍然null在您访问它时。

改变:

private static ArrayList <EdgeButton> all;   

至:

private static List<EdgeButton> all = new ArrayList<EdgeButton>();

在你的两个班级。请注意,您应该将接口用于引用类型。

于 2013-08-01T07:30:43.067 回答