【问题标题】:Get selected value JList or List in Java Swing, stuck with getElementAt() of ListModel在Java Swing中获取选定的值JList或List,卡在ListModel的getElementAt()中
【发布时间】:2014-10-31 08:39:36
【问题描述】:

我正在使用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()更改为返回“Subject”,列表将显示@object.abxdef

【问题讨论】:

    标签: java swing jlist defaultlistmodel list.selectedvalue


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      相关资源
      最近更新 更多