1

我正在尝试使用以下项目填充我的 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,正如您从上面看到的那样,我试图确保它在正确的时候被选中。我遇到的问题是只检查了当前选择的项目,这对我来说很奇怪。我通过添加打印语句验证了这一点,该语句只打印一次..

有任何想法吗?

谢谢

4

1 回答 1

3

您对 equals() 方法的实现是错误的。Object 永远不会是 Integer,它永远是 DropDownItem。我猜想通过将当前对象的“id”与传递给 equals() 方法的对象的“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。

于 2010-10-20T04:29:54.817 回答