22

私はパネルでコンボボックスを使用しています。私が知っているように、テキストのみでアイテムを追加できます

    comboBox.addItem('item text');

しかし、HTML select のように、項目と項目テキストの値を使用する必要がある場合があります。

    <select><option value="item_value">Item Text</option></select>

コンボ ボックス項目に値とタイトルの両方を設定する方法はありますか?

今のところ、ハッシュを使用してこの問題を解決しています。

4

6 に答える 6

48

値をクラスにラップし、toString()メソッドをオーバーライドします。

class ComboItem
{
    private String key;
    private String value;

    public ComboItem(String key, String value)
    {
        this.key = key;
        this.value = value;
    }

    @Override
    public String toString()
    {
        return key;
    }

    public String getKey()
    {
        return key;
    }

    public String getValue()
    {
        return value;
    }
}

ComboBox に ComboItem を追加します。

comboBox.addItem(new ComboItem("Visible String 1", "Value 1"));
comboBox.addItem(new ComboItem("Visible String 2", "Value 2"));
comboBox.addItem(new ComboItem("Visible String 3", "Value 3"));

選択したアイテムを取得するたびに。

Object item = comboBox.getSelectedItem();
String value = ((ComboItem)item).getValue();
于 2013-07-26T18:02:52.990 に答える
3

任意のオブジェクトをアイテムとして使用できます。そのオブジェクトには、必要ないくつかのフィールドを含めることができます。あなたの場合、値フィールド。テキストを表すには、toString() メソッドをオーバーライドする必要があります。あなたの場合は「アイテムテキスト」です。例を参照してください。

public class AnyObject {

    private String value;
    private String text;

    public AnyObject(String value, String text) {
        this.value = value;
        this.text = text;
    }

...

    @Override
    public String toString() {
        return text;
    }
}

comboBox.addItem(new AnyObject("item_value", "item text"));
于 2013-07-26T18:33:28.047 に答える
2

addItem(Object) takes an object. The default JComboBox renderer calls toString() on that object and that's what it shows as the label.

So, don't pass in a String to addItem(). Pass in an object whose toString() method returns the label you want. The object can contain any number of other data fields also.

Try passing this into your combobox and see how it renders. getSelectedItem() will return the object, which you can cast back to Widget to get the value from.

public final class Widget {
    private final int value;
    private final String label;

    public Widget(int value, String label) {
        this.value = value;
        this.label = label;
    }

    public int getValue() {
        return this.value;
    }

    public String toString() {
        return this.label;
    }
}
于 2013-07-26T18:50:53.310 に答える
0

シーケンシャル インデックスを使用しているため、メソッド呼び出しsetSelectedIndex("item_value");が機能しません。setSelectedIndex

于 2015-07-08T21:00:18.893 に答える