【问题标题】:JComboBox set selected item not working properlyJComboBox 设置所选项目无法正常工作
【发布时间】:2011-04-27 20:18:46
【问题描述】:

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

有什么想法吗?

谢谢

【问题讨论】:

    标签: java swing jcombobox


    【解决方案1】:

    您对 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。

    【讨论】:

    • 但问题是,我正在传递 setSelectedItem 一个整数(从数据库中读取)。而且,当我的 print 语句被执行时,该对象是一个 Integer 一次。
    • 也许数据库中的对象是一个整数,但组合框模型中的对象是“DropDownItem”。所以 Integer 永远不能等于 DropDownItem。有关示例代码,请参见上面的“编辑”。
    • 嗯,好吧,那么我将如何仅根据数据库中的整数来选择项目?
    • 我在第一次回复中解释了这一点。当“id”值相同时,您需要正确实现equals方法以返回true。然后,当您从数据库中获取整数时,您可以创建一个新的 DropDownItem 并设置 ID 值,然后将 setSelectedItem 与该对象一起使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    • 2015-11-05
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    相关资源
    最近更新 更多