Java JComboBox设置所选项目工作不正常

Java JComboBox设置所选项目工作不正常,java,swing,jcombobox,Java,Swing,Jcombobox,我正在尝试用以下项目填充我的JComboBox: public class DropDownItem { private String text; private int id; public void setText(String text) { this.text = text; } public void setId(int id) { this.id = id; } public String toString() { return text; } pu

我正在尝试用以下项目填充我的JComboBox:

public class DropDownItem {

private String text;
private int id;

public void setText(String text) {
    this.text = text;
}

public void setId(int id) {
    this.id = id;
}

public String toString() {
    return text;
}

public int getId() {
    return id;
}


public boolean equals(Object i) {
    System.out.println("i is: " + i);

    if(i instanceof Integer) {
        if((Integer)i == (Integer)id) {
        System.out.println("It's me!");
        return true;
        }
        else {
            System.out.println("I was asked if I was " + (Integer)i + " but I'm " + id + " as I'm " + text);
            return super.equals(i);
        }
    }
    else return super.equals(i);
}
}

但是,我在使用JComboBox的
setSelectedItem
时遇到了问题。我传递
setSelectItem
一个int,正如您从上面看到的,我试图确保它在正确的时候被选中。我遇到的问题是,只有当前选中的项目被选中,这对我来说非常奇怪。我通过添加打印语句验证了这一点,该语句只打印一次

有什么想法吗


谢谢

您对equals()方法的实现是错误的。对象永远不会是整数,它将始终是DropDownItem。我想通过比较当前对象的“id”与传递给equals()方法的对象的“id”来检查相等性

编辑:如果将新项目添加到模型中并希望选择它,则代码应如下所示:

DropDownItem item = new DropDownItem();
item.setId(1);
item.setText("one");
comboBox.addItem( item );
comboBox.setSelectedItem( item );
DropDownItem item = (DropDownItem)i;

return getId() == item.getId();
Edit2:equals方法将类似于:

DropDownItem item = new DropDownItem();
item.setId(1);
item.setText("one");
comboBox.addItem( item );
comboBox.setSelectedItem( item );
DropDownItem item = (DropDownItem)i;

return getId() == item.getId();
现在,当您从数据库中获取整数值时,只需执行以下操作:

DropDownItem item = new DropDownItem();
item.setId(???);
comboBox.setSelectedItem( item );

即使您没有指定描述,也会选择该项,因为equals方法只关心id。

但问题是,我正在向setSelectedItem传递一个整数(从数据库读取)。而且,在执行我的print语句时,对象一次是一个整数。可能数据库中的对象是一个整数,但组合框模型中的对象是“DropDownItem”。因此,整数永远不能等于DropDownItem。请参阅上面的“编辑”以获取示例代码。嗯,好吧,那么我如何根据数据库中的整数选择项目呢?我在第一次答复中解释了这一点。当“id”值相同时,您需要正确实现equals方法以返回true。然后,当您从数据库中获得一个整数时,您可以创建一个新的DropDownItem,只需设置ID值,然后将setSelectedItem用于该对象。