java - 如何创建 JPanel vector ?

标签 java arrays swing nullpointerexception jpanel

我尝试向面板添加在下面的类中定义的子面板数组,但我得到一个 java.lang.ArrayIndexOutOfBoundsException:

public class PlayerPanel extends JPanel{
    public JPanel[] playerPanelArray;

    public PlayerPanel(int nrOfPlayers){    
        playerPanelArray = new JPanel[nrOfPlayers];

        for(int i = 0; i < nrOfPlayers; i++) {
            playerPanelArray[i] = new JPanel();
            playerPanelArray[i].add(new JButton("See if working"));
            add(playerPanelArray[i]);
        }
    }
}

但我仍然不明白为什么我必须初始化 playerPanelArray 两次,如下所示:

playerPanelArray = new JPanel[nrOfPlayers];

和:

playerPanelArray[i] = new JPanel();

如果我删除第一个,它会给我一个java.lang.NullPointerException

最佳答案

您的第一个语句告诉编译器分配一个包含 JPanel 的 nrOfPlayers 数组。但没有一个元素被分配,它们都包含 null

第二条语句使用新的 JPanel 初始化每个元素,并将它们的引用放在之前分配的位置。如果你不先分配数组,引用就无处可放。

关于java - 如何创建 JPanel vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34393204/

相关文章:

java - JShell 中声明的方法是 lambdas?

c - 指向二维数组的指针

将数组中的 char 元素与运算符进行比较

java - 无法在 jboss 7 上使用 @EJB 注入(inject) EJB 3

java - SpringApplicationConfiguration 无法解析为类型

c - 定时数组静态数组分配与 C 中堆栈上的数组

java - 将 ScrollPane 添加到 JTextArea

java - 将子图像数据存储在数组中

Java ArrayList的正确使用

java - 如何在 Android API <24 中将对象包装在 lambda 中