java - 添加新的 jpanel 后出现 IndexOutOfBound 异常

标签 java swing jpanel indexoutofboundsexception

我有一个组合框,我可以在其中选择一个人。选择一个人后,我想用一个新的 JPanel 来更改我的 Activity 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);
}

关于java - 添加新的 jpanel 后出现 IndexOutOfBound 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37701783/

相关文章:

java - 可变对象的 hashCode() 是否有用?

java - 另一个 SwingWorker 的 done 方法中的 SwingWorker

java - 检测 JPanel 卸载/关闭事件

java - 如何在 JPanel 数组中使用 JCheckbox 数组

java - 将 JPanel 的区域转换为 BufferedImage

java - 设置对象数组并在其中搜索变量

java - 在 ReentrantReadWriteLock 中是否有 WriteLock 优先于 ReadLock

java - 写入时更改 JTextPane 中的样式

java - 添加滚动条和图像大小调整问题

java - jSoup使用td类标签从网页获取数据