1

我正在使用 DefaultComboBoxModel 和自定义项填充组合框。每个项目都包含一个 id 和一个名称。我正在遍历一个表,并且基于选择,我想从组合框中删除选定的元素。对于我要删除的项目,我有我正在迭代的表中的 ID 和名称。我尝试使用接收对象的 removeItem 。我将 ID 和名称传递给我的自定义 Item 构造函数,但这似乎不起作用。谁能告诉我我在这里缺少什么?

填充组合框的代码:

Vector<Object> companyList = new Vector<Object>();
        while(rs.next()){
            companyList.addElement(new Item(rs.getInt(1),rs.getString(2)));
        }
DefaultComboBoxModel cmod = new DefaultComboBoxModel(companyList);
        companyName.setModel(cmod);

自定义项目代码:

class Item
{
    private int id;
    private String name;

    public Item(int id, String name)
    {
        this.id = id;
        this.name = name;
    }

    public int getId()
    {
        return id;
    }

    public String getName()
    {
        return name;
    }

    public String toString()
    {
        return name;
    }
}

删除项目的代码(此示例为硬编码):

 companyName.removeItem(new Item(50002,"ALLIED WASTE SYSTEMS"));

removeItem 说它接受一个对象,所以我不确定为什么这不起作用。任何帮助,将不胜感激!

4

2 回答 2

5

您的课程Item不会覆盖equals()hashCode()因此“相等”的项目比较相等。您需要实现这两种方法以满足集合类所需的约定。

于 2013-08-05T20:09:15.123 回答
1

您可以使用临时列表,其中不包含您要删除的元素...

然后使用该临时列表更改您的组合框模型...

DefaultComboBoxModel cmod = new DefaultComboBoxModel(tempCompanyList);
    companyName.setModel(cmod);

您可以使用该removeElementAt方法,正如他们已经提到的那样...:D

于 2013-08-06T09:11:06.703 回答