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的主要内容,如果未能解决你的问题,请参考以下文章

如何重新启动应用程序的更新循环

iCloud 仅在应用启动时更新

仅在重新渲染组件时才反应状态更新

在使用ItemContainerGenerator进行自定义时,WPF ComboBox在第二次打开之前不会更新项目

仅在冷启动或设置更改时重新加载表数据

PyQt5 GUI 仅在单击屏幕并重新打开时更新