【问题标题】:Updating Swing DefaultComboBoxModel更新 Swing DefaultComboBoxModel
【发布时间】:2026-02-03 18:35:01
【问题描述】:

我正在尝试使用该代码更新名为“mdlCategory”的 DefaultComboBoxModel。

private void categoriesUpdate(String categoryName, boolean addElement) {

    if (!categoryName.equals("")) {

        if (addElement) {//that block works propertly
            Category c = new Category(-1);
            c.setName(categoryName);
            mdlCategory.addElement(c);
            selAllergenCategory.setSelectedItem(c);
        } else {//not works!!
            Category cat = (Category) mdlCategories.getSelectedItem();
            cat.setName(categoryName);
            selAllergenCategory.setSelectedItem(cat);
        }
    }
}

当 addElement 为 true 时,以正确的方式将新类别添加到模型中。

我在“else”块中遇到问题...当尝试更新从 DefaultComboBoxModel 获取它的类别时,模型不会以正确的方式更改,甚至删除并再次添加它,尽管当我将光标传递过去时组合,更改会发生但不会持续存在。

我是否以错误的方式更新模型的类别对象?

【问题讨论】:

  • 为了更好的帮助,请尽快发布SSCCE,简短,可运行,可编译,大约JFrame 与一个JComboBoxJButton 调用上午问题,否则不知道

标签: java eclipse swing netbeans


【解决方案1】:

您应该通知 Swing 您的模型中的更改。在 if-block 中,它使 mdlCategory.addElement(c); .对于 else-block 你应该调用 setElementAt:

} else {//not works!!
            Category cat = (Category) mdlCategories.getSelectedItem();
            int idx = mdlCategories.indexOf(cat);
            cat.setName(categoryName);
            mdlCategory.setElementAt(cat, idx);
            selAllergenCategory.setSelectedItem(cat);
}

可能最后一行 (selAllergenCategory.setSelectedItem(cat);) 不是必需的

【讨论】: