Добавление элементов в 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
использует последовательный индекс.