Получить выбранное значение JList или List в Java Swing, застряв с помощью getElementAt() в ListModel

я использую элемент управления Swing List для привязки данных, я (должен) использовать класс для создания модели

public class SubjectListModel extends AbstractListModel<String> {

public ArrayList<Subject> listSubjects;

public SubjectListModel(ArrayList<Subject> listSubjects) {
    this.listSubjects = listSubjects;
}

@Override
public int getSize() {
    return listSubjects.size();
}

@Override
public String getElementAt(int index) {
    return listSubjects.get(index).name;
}
 class Subject{
 int id;
string name;
}

Я хочу использовать список для привязки моего ArrayList. Могу ли я установить что-то вроде «отображаемое текстовое поле» для поля «имя» и «поле значения» для моего «идентификатора»? Чтобы я мог получить эти значения по мере необходимости. Лучшая мечта - я могу получить всю выбранную «Тему» вместо строкового поля. Я видел, что в списке есть только getSelectedValue, и если я хочу отобразить тему в списке, я должен установить getValueAt() в модели, чтобы вернуть «имя», а getSelectedValue() также вернуть выбранное «имя» :( Если я измените getElementAt() в классе модели, чтобы он возвращал «Subject», в списке будет отображаться @object.abxdef


person Andiana    schedule 06.09.2014    source источник


Ответы (1)


Просто переопределите toString() из Subject и верните то, что вы хотите отображать в списке. Затем добавьте все свои экземпляры Subject в список. Нет необходимости в пользовательском ListModel. Просто используйте DefaultListModel. Когда вы получите выбранный Subject, просто используйте один из его геттеров в нужном поле.

Также нет необходимости хранить ваш объект в двух местах (т. е. ListModel и ArrayList), просто добавьте все в модель.

class Subject {
   private int id;
   private String name;

   public Subject(int id, String name) {
       this.id = id;
       this.name = name;
   }

   public int getId() { return id; }
   public String getName() { return name; }

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

DefaultListModel model = new DefaultListModel();
model.addElement(new Subject(1, "Math"));
Subject subject = (Subject)model.getElementAt(0);
System.out.println(subject);
// result -> Math
person Paul Samsotha    schedule 06.09.2014