我有一个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);
答案 0 :(得分:2)
通过首先删除旧面板并随后添加新面板来解决问题:
public void initGUI(Person person) {
frame.getContentPane().removeAll();
frame.repaint();
frame.revalidate();
frame.setContentPane(mainPanel);
frame.repaint();
frame.revalidate();
frame.setVisible(true);
}