Добавление элементов в JComboBox

Я использую поле со списком на панели, и, как я знаю, мы можем добавлять элементы только с текстом

    comboBox.addItem('item text');

Но иногда мне нужно использовать некоторое значение текста элемента и элемента, как в html select:

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

Есть ли способ установить как значение, так и заголовок в поле со списком?

Теперь я использую хэш для решения этой проблемы.

Ответы

Ответ 1

Оберните значения в классе и переопределите метод 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;
    }
}

Добавьте ComboItem в свой comboBox.

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();

Ответ 2

Вы можете использовать любой объект как элемент. В этом объекте вы можете иметь несколько полей, которые вам нужны. В вашем случае поле значения. Вы должны переопределить метод 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"));

Ответ 3

addItem (Object) принимает объект. Обработчик JComboBox по умолчанию вызывает toString() на этом объекте и то, что он показывает как метку.

Итак, не переходите в String к addItem(). Передайте объект, метод toString() возвращает требуемую метку. Объект может содержать любое количество других полей данных.

Попробуйте передать это в свой combobox и посмотреть, как он выглядит. getSelectedItem() вернет объект, который вы можете вернуть обратно в Виджет, чтобы получить значение.

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

Ответ 4

Вызов метода setSelectedIndex("item_value"); не работает, потому что setSelectedIndex использует последовательный индекс.