jcombobox setSelectedItem

时间:2016-06-16 03:02:32

标签: java swing

我创建了一个包含三个项目的组合框。我正在尝试按索引和值设置所选项目。

  1. 当我执行setSelectedIndex()时,代码运行良好。
  2. 我正在尝试按值设置所选项目。所以我尝试创建另一个具有相同值(变量名称d)的对象,并执行setSelectedItem但它失败了。当我尝试打印出selectedItem时,它不会打印'C C'。它打印先前选择的项目'B B'
  3. 那么如何按值设置selectedItem?做建议。 非常感谢!

    import javax.swing.JComboBox;
    
    public class testt {
    
        public static void main(String[] args) {
    
            obj a = new obj("A A");
            obj b = new obj("B B");
            obj c = new obj("C C");
    
            obj[] lst = { a, b, c };
    
            JComboBox box = new JComboBox(lst);
            box.setSelectedIndex(1);
            System.out.println("value is:"+((obj) box.getSelectedItem()).toString());
    
            obj d = new obj("C C");
            box.setSelectedItem(d);
            System.out.println(value is:"+((((obj) box.getSelectedItem()).toString());
        }
    }
    
    class obj {
        String value;    
        public obj(String value) {
            this.value = value;
        }    
        public String toString() {
            return value;
        }
    }
    

1 个答案:

答案 0 :(得分:2)

Equals和Hashcode问题。以下应解决问题。

  class obj {
    String value;    
    public obj(String value) {
        this.value = value;
    }    
    public String toString() {
        return value;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 17 * hash + Objects.hashCode(this.value);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final obj other = (obj) obj;
        if (!Objects.equals(this.value, other.value)) {
            return false;
        }
        return true;
    }