1

我正在使用 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;
}

我希望使用 List 来绑定我的 ArrayList,我可以为“名称”字段设置“显示文本字段”,为我的“id”设置“值字段”吗?这样我就可以根据需要检索这些值。最好的梦想是我可以检索整个选定的“主题”而不是字符串字段。我看到列表只有 getSelectedValue,如果我想在列表中显示主题,我必须在模型中设置 getValueAt() 以返回“名称”,并且 getSelectedValue() 也返回选定的“名称”:(如果我更改模型类中的 getElementAt() 以返回“主题”,列表将显示 @object.abxdef

4

1 回答 1

2

只需覆盖toString(),Subject并返回您希望在列表中显示的任何内容。然后将所有Subject实例添加到列表中。无需自定义ListModel。只需使用DefaultListModel. 当您选择时,Subject只需将其中一个吸气剂用于您想要的字段。

也无需将您的对象存储在两个位置(即 ListModelArrayList),只需将所有内容添加到模型中即可。

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
于 2014-09-06T16:04:09.330 回答