添加新的 jpanel 后的 IndexOutOfBound 异常



我有一个组合框,我可以在其中选择一个人。选择人员后,我想将我的活动 JPanel 更改为提供我所选人员的所有信息的新 JPanel。但是当我更改 JPanel 时,我会收到一个 IndexOutOfBoundsException。我是新手,但我总是说这个错误只出现在小数组上?我做错了什么?

我的第一堂课:

 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);
}

错误出现在此行的第二个类中:

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$0(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);
}

最新更新