我有一個組合框,可以選擇一個人。選擇一個人之後,我想用一個提供我選擇的人的所有信息的新人改變我的活動JPanel。但是當我更改JPanel時,我收到一個IndexOutOfBoundsException。我是一個新手,但我總是認爲這個錯誤只出現在小數組?我做錯了什麼?添加新jpanel後IndexOutOfBound異常
我的第一類:
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)
*「我做了什麼錯?」 *例如省略堆棧跟蹤。 – Tom
對不起,湯姆!我是Stack Overflow的新手,我忘記了。我會編輯它! – SovietPanda
你的問題是這行'frame.setContentPane(mainPanel)',因爲Swing試圖從內部分層窗格中刪除以前的內容窗格,但該窗格只有1個項目,而不是兩個。要麼你在玩分層窗格,要麼Swing本身在這裏有問題。請嘗試創建[mcve],以便我們可以在本地重現您的問題。 – Tom