ComboBox仅在重新启动时更新,Java
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ComboBox仅在重新启动时更新,Java相关的知识,希望对你有一定的参考价值。
我正在做一个小宠物项目,我的ComboBox遇到了一个奇怪的问题。这部分程序的预期功能是将一个项目添加到ArrayList中,该列表填充comboBox(为此目的转换为数组),写入文件,然后再次读取文件以更新在组合框中列出。由于我不理解的原因,它不会动态改变,并且重绘不起作用。但是,如果我关闭并重新打开程序,当构造函数反序列化已更新的文件时,它确实反映了更改。这是代码:
编辑:我尝试了revalidate方法,相同的行为继续。当程序打开时,如果我添加一个项目,它就不会显示在列表中,并且程序的其余部分就像我添加的项目不存在一样,甚至会抛出空指针并尝试引用它。关闭程序并重新打开它之后,在上一次运行中添加的项目将出现在列表中,因为它应该是,但是删除方法不起作用,并且当前项目不会删除该程序的运行是活动的。
编辑2:我的comboBox的代码,以及在它们被调用的地方包含revalidate / repaint方法。我已经单独尝试了每个,以及两者,行为保持不变
JComboBox comboBox = new JComboBox(itemList.toArray(new Item[itemList.size()]));
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Item newItem = new Item();
newItem.setItemName(JOptionPane.showInputDialog("Please enter the name of the site or service this login is for."));
newItem.setUserName(JOptionPane.showInputDialog("Please enter your username for this site or service"));
newItem.setPassWord(JOptionPane.showInputDialog("Please enter the password you use for this site or service"));
itemList.add(newItem);
try {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(passListFile));
oos.writeObject(itemList);
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(passListFile));
itemList = (ArrayList<Item>) ois.readObject();
ois.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
comboBox.revalidate();
comboBox.repaint();
}
});
答案
自己想出来,我需要将默认模型更新为arraylist,就像这样
comboBox.setModel(new DefaultComboBoxModel<Item>(itemList.toArray(new Item[itemList.size()])));
comboBox.getParent().validate();
以上是关于ComboBox仅在重新启动时更新,Java的主要内容,如果未能解决你的问题,请参考以下文章