IndexOutOfBound添加新jpanel后的异常

时间:2016-06-08 11:54:35

标签: java swing jpanel indexoutofboundsexception

我有一个ComboBox,我可以选择一个人。选择一个Person后,我想用一个新的JPanel更改我的活动JPanel,它提供我选择的人的所有信息。但是当我更改JPanel时,我收到了IndexOutOfBoundsException。我是一个新手,但我总是认为这个错误只出现在小阵列中?我做错了什么?

我的第一堂课:

InputStream is = conn.getInputStream();

BufferedReader buffer = null;
buffer = new BufferedReader(new InputStreamReader(is, "iso-8859-9"));

StringBuffer builder = new StringBuffer(); 
int byteRead;
while ((byteRead = buffer.read()) != -1) {
    builder.append((char) byteRead);
}
buffer.close();
System.out.println(builder.toString());

我的第二个:

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

stacktrace:

frame.setContentPane(mainPanel);

1 个答案:

答案 0 :(得分:2)

通过首先删除旧面板并随后添加新面板来解决问题:

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

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