添加新 jpanel 后出现 IndexOutOfBound 异常

IndexOutOfBound Exception after adding new jpanel

我有一个 ComboBox,我可以在其中 select 一个人。在 selecting 一个人之后,我想用一个新的 JPanel 来更改我的活动 JPanel,它提供我 selected 的人的所有信息。但是当我更改 JPanel 时,我收到了 IndexOutOfBoundsException。我是新手,但我一直认为这个错误只出现在小数组上?我做错了什么?

我的第一个class:

 public void initGUI() {
    comboBox1.removeAllItems();

    for (Person personi : listPerson) {
        comboBox1.addItem(personi);
    }
    comboBox1.setSelectedIndex(-1);

    comboBox1.addItemListener(e -> comboBox1Pressed(e));
    frame.setContentPane(mainPanel);
    frame.repaint();
    frame.revalidate();
    frame.setVisible(true);
}

private void comboBox1Pressed(ItemEvent ie) {
    if (ie.getStateChange() == ie.SELECTED) {
        gui_Person.initGUI((Person) ie.getItem());
    }
}

我的第二个:

public void initGUI(Person person) {
    frame.setContentPane(mainPanel);
    frame.repaint();
    frame.revalidate();
    frame.setVisible(true);
}

错误出现在这一行的第二个class:

frame.setContentPane(mainPanel);

堆栈跟踪:

Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.remove(ArrayList.java:492)
at java.awt.Container.remove(Container.java:1217)
at javax.swing.JLayeredPane.remove(JLayeredPane.java:246)
at java.awt.Container.remove(Container.java:1262)
at javax.swing.JRootPane.setContentPane(JRootPane.java:623)
at javax.swing.JFrame.setContentPane(JFrame.java:698)
at GUI_Person.initGUI(GUI_Person.java:45)
at GUI_Person.initGUI(GUI_Person.java:45)
at GUI_Main.comboBox1Pressed(GUI_Main.java:42)
at GUI_Main.lambda$initGUI[=13=](GUI_Main.java:32)

通过先删除旧面板然后添加新面板解决了问题:

public void initGUI(Person person) {
    frame.getContentPane().removeAll();
    frame.repaint();
    frame.revalidate();

    frame.setContentPane(mainPanel);
    frame.repaint();
    frame.revalidate();
    frame.setVisible(true);
}