2016-06-16 9 views
0

私は、3つのアイテムを持つコンボボックスを作成しました。選択した項目をインデックスと値で設定しようとしています。jcombobox setSelectedItem

  1. setSelectedIndex()を実行すると、コードは正常に動作します。
  2. 選択したアイテムを値で設定しようとしています。だから、同じ値(変数名d)を持つ別のオブジェクトを作成してsetSelectedItemを実行しようとしますが、失敗します。 selectedItemを印刷しようとすると、 'C C'が表示されません。以前選択したアイテム 'B B'を印刷します

どのように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; 
    } 
} 

答えて

2

等号とハッシュコードの問題。以下は問題を解決するはずです。

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; 
    } 
+0

返信いただきありがとうございます。解決策はうまくいきます。ほんのいくつかの質問。 1.なぜあなたのハッシュコードで5と17を使用しましたか?任意の番号または特定の番号の組を使用する必要がありますか? 2.クラスobjが多くの値を持っていたらどうなるでしょうか?それらもすべて比較しますか? – RahlSK

+0

これはIDEで生成されたハッシュコードメソッドでした。もちろん、特定のペアを使用することができます。クラスobjが多くの値を取らなければならないものは?_特定のプロパティは、オブジェクトの一意性を定義します。あなたは、あなたが比較できることに基づいて、すべての特性がユニークであるようになるオブジェクトの設計に基づいて決定することができます。 – Beniton