JComboBox将所选项目设置为无法正常工作

时间:2010-10-20 04:18:40

标签: 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;
}

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,正如您从上面所看到的,我已经尝试确保它在正确的时候被选中。我遇到的问题是,只检查当前选中的项目,这对我来说很奇怪。我通过添加print语句来验证,该语句只打印一次..

有什么想法吗?

由于

1 个答案:

答案 0 :(得分:3)

你的equals()方法的实现是错误的。 Object永远不会是一个整数,它永远是一个DropDownItem。我想通过比较当前Object的“id”和传递给equals()方法的Object的“id”来检查相等性。

编辑:如果您向模型添加新项目并想要选择它,您的代码应该是这样的:

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

Edit2:equals方法看起来像:

DropDownItem item = (DropDownItem)i;

return getId() == item.getId();

现在,当您从数据库中获取整数值时,您可以这样做:

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

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