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ます。私はintを渡しsetSelectItemます。上からわかるように、正しいものが選択されていることを確認しようとしました。私が抱えている問題は、現在選択されている項目だけがチェックされるということです。これは私には非常に奇妙です。一度だけ印刷されるprintステートメントを追加して確認しました。

何か案は?

ありがとう

4

1 に答える 1

3

equals() メソッドの実装が間違っています。オブジェクトが整数になることはなく、常に 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 に答える