2014-09-06 8 views
1

의 getElementAt()와 함께 붙어 자바 스윙에서 선택한 값 JList의 또는 목록을 가져 오기, I (해야한다) 모델을내가 데이터를 바인딩 스윙 목록 컨트롤을 사용하고의 ListModel

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 만 있고 목록에 제목을 표시하려면 "name"을 반환하도록 모델에서 getValueAt()를 설정하고 getSelectedValue()도 선택한 "name"을 반환해야합니다. (If 내가 "주제"를 반환하는 모델 클래스에 getElementAt()를 변경, 목록 @가 object.abxdef

답변

2

그냥 SubjecttoString()을 무시 표시하고 목록에 표시 할 무엇도 반환됩니다. 그런 다음 Subject를 추가 모든 목록에 인스턴스. 사용자 정의 ListModel 선택한 Subject 그냥 당신이 원하는 분야에의 게터 중 하나를 사용하여 얻을 때. 그냥. 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 
+0

고맙습니다. – Andiana