簡體   English   中英

在Java Swing中獲取選定值JList或List,並與ListModel的getElementAt()綁定

[英]Get selected value JList or List in Java Swing, stuck with getElementAt() of 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,是否可以為“名稱”字段設置“顯示文本字段”,為“ id”設置“值字段”? 這樣我就可以根據需要檢索這些值。 最好的夢想是我可以檢索整個選定的“主題”而不是字符串字段。 我看到列表中只有getSelectedValue,如果我想在列表中顯示主題,則必須在模型中設置getValueAt()以返回“名稱”,而getSelectedValue()也返回所選的“名稱” :(如果我在模型類中更改getElementAt()以返回“ Subject”,列表將顯示@ object.abxdef

只需重寫Subject toString() ,然后返回您想要在列表中顯示的內容。 然后將所有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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM