Пара значений ключей для Java Swing JList - PullRequest
2 голосов
/ 29 января 2012

У меня было такое решение для моего JComboBox, чтобы получить эффект пар «ключ / значение» для отображения текста, но получить идентификатор, например, ID = 2, но текст «Банан».

Теперь мне нужно реализовать этовместо этого в JList, но у меня возникают проблемы с возвратом объекта из JList, чтобы я мог получить значение.

public class ComboItem {

    private String value;
    private String label;

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

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

    public String getLabel() {
        return this.label;
    }

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


DefaultListModel listmodel = new DefaultListModel();
JList cAktkod = new JList(listmodel);
int pos = cAktkod.getModel().getSize();

listmodel.add(pos, new ComboItem(resultSet.getString("MMCFI5"),resultSet.getString("CTTX40")));

Но на этом этапе, если я сделаю

cAktkod.getSelectedValue();

Itвозвращает объект, и я не знаю, как получить его, чтобы дать мне мой объект ComboItem, чтобы я мог получить getValue () вместо

Ответы [ 3 ]

6 голосов
/ 29 января 2012

В основном JList не знает или не заботится о том, какой тип (то есть подкласс) объекта находится в списке. Но если все, что вы поместили в список, это ComboItem, то получаемый вами объект будет ComboItem. Вам просто нужно привести его, чтобы сообщить компилятору, какой он тип.

Object selectedObj = cAktkod.getSelectedValue();
if (selectedObj instanceof ComboItem) {
    ComboItem selectedItem = (ComboItem) selectedObj;
}
else {
    // something has gone wrong!
}
5 голосов
/ 29 января 2012

мрэ обрисовал в общих чертах одно простое решение.Если вы хотите избежать приведения объектов обратно к их базовым типам, есть другой подход.

  • Создание универсального Vector из ComboItem.
  • Добавьте каждый элемент Vector
  • . Создайте JList, используя Vector
  • . При выборе получите выбранный индекс, затем вызовите Vector.elementAt(index), чтобы получить соответствующий объект.
4 голосов
/ 29 января 2012

Вы должны иметь возможность использовать общую версию своего списка и модели, поэтому вы должны использовать JList и DefaultListModel . Таким образом, оба объекта, которые вы добавляете и возвращаете, имеют тип ComboItem.

...