gpt4 book ai didi

java - 使用静态工厂样式构造函数将元素添加到一个或多个静态列表

转载 作者:行者123 更新时间:2023-12-02 06:51:21 27 4
gpt4 key购买 nike

我想维护一个按钮列表,将其放置在类似网格布局的 GUI 中。

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

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

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

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

所以我一直在使用工厂式的构造。这是我的父类(super class) 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);

那么我哪里出错了?为什么我会收到 null ptr 异常?

提前致谢!

最佳答案

您尚未初始化您的列表。因此,当您访问它时,它仍然是 null

更改:

private static ArrayList <EdgeButton> all;   

至:

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

在你的两个类(class)中。请注意,您应该使用接口(interface)作为引用类型。

关于java - 使用静态工厂样式构造函数将元素添加到一个或多个静态列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17987695/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com