代码之家  ›  专栏  ›  技术社区  ›  Andiana

获取Java Swing中的选定值JList或List,使用ListModel的getElementAt()

  •  1
  • Andiana  · 技术社区  · 10 年前

    我使用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,我可以为“name”字段设置“display text field”,为“id”设置“value field”吗?这样我就可以根据需要检索这些值。 最好的梦想是我可以检索整个选定的“主题”,而不是字符串字段。 我看到列表中只有getSelectedValue,如果我想在列表中显示主题,我必须在model中设置getValueAt()以返回“name”,getSelectedValue()也返回所选的“name”:(如果我在model类中更改getElementAt(

    1 回复  |  直到 10 年前
        1
  •  2
  •   Paul Samsotha    10 年前

    仅覆盖 toString() 属于 Subject ,并返回您希望在列表中显示的内容。然后添加所有 主题 实例添加到列表中。无需自定义 ListModel 。只需使用 DefaultListModel 。当您选择 主题 只要使用其中一个吸气器就可以到达你想要的领域。

    也不需要将对象存储在两个位置(即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