2012-03-07 2 views
0

기본적으로 CD ArrayList <의 인스턴스를 보유하고있는 CD 라이브러리를 가지고 있는데, 사람들의 ArrayList를 가져 왔습니다. <> CD를 "빌려"할 수 있습니다 ... 해당 CD에서 사용 가능한 또는 사용할 수없는 목록에 추가됩니다.JList를 ArrayList로 사용하는 자바 스윙 <>

public CDStore(String storeNme) { 
     storeName = storeNme; 
     discsArray = new ArrayList<CD>(); 
     peopleArray = new ArrayList<Person>(); 
    } 

JList를 사용하여 목록의 요소를 CD 인스턴스와 동일하게 만들려고합니다.

그래서 ... 목록에서 항목 1은 인덱스 0에있는 CD, 항목 2 = 인덱스 1 등 ....

String[] entries = ??????????????????; 
     JList listOfCD = new JList(entries); 
     listOfCD.setVisibleRowCount(4); 
     JScrollPane listPane = new JScrollPane(listOfCD); 
     JTextField valueField = new JTextField("None", 7); 

감사합니다 것입니다. 당신이 CD 이름을 검색하는 방법이있는 경우

+0

목록에 표시된 CD의 이름을 얻으려고하십니까? – bvulaj

+0

본질적으로, 예 ... 디스크 요소의 요소를 요소 항목으로 사용하려고합니다. –

답변

2

CDStoreListModel 인터페이스를 구현할 수 있습니다. JList의 모델로 CDStore을 사용할 수 있습니다.

CDStore store = new CDStore("Store"); 
// add some CDs 

JList listOfCD = new JList(store); 
listOfCD.setVisibleRowCount(4); 
JScrollPane listPane = new JScrollPane(listOfCD); 
JTextField valueField = new JTextField("None", 7); 

여기에 CDStore implements ListModel의 구현 예가 나와 있습니다. discsArray 변경 사항이있을 때마다 fireContentsChanged 메서드를 호출해야합니다.

public class CDStore implements ListModel { 
    private String storeName; 
    private List<CD> discsArray; 
    private List<Person> peopleArray; 

    public CDStore(String storeNme) { 
     storeName = storeNme; 
     discsArray = new ArrayList<CD>(); 
     peopleArray = new ArrayList<Person>(); 
    } 

    //your methods 

    //ListModel 
    private List<ListDataListener> listener = new ArrayList<ListDataListener>(); 

    public void addListDataListener(ListDataListener l) { 
     listener.add(l); 
    } 

    public void removeListDataListener(ListDataListener l) { 
     listener.remove(l); 
    } 

    protected void fireContentsChanged() { 
     for (ListDataListener l : listener) { 
      l.contentsChanged(new ListDataEvent(this, ListDataEvent.CONTENTS_CHANGED, 0, discsArray.size()-1)); 
     } 
    } 

    public Object getElementAt(int index) { 
     return discsArray.get(index); 
    } 

    public int getSize() { 
     return discsArray.size() 
    } 
} 
+0

+1 또한 일부 메소드의 기존 구현을 활용하기 위해'AbstractListModel'을 확장하는 것을 고려하십시오. – trashgod

1

, 당신이 당신의 항목 배열에 작성해야

String[] entries = new String[discsArray.length]; 
int index = 0; 
for (CD cd: discsArray) { 
    entries[index++] = cd.getCDName(); 
} 

이 시도 할 수 ,의는 getCDName()를 호출 할 수 있습니다.

+0

당신이 말한 것을 시도했지만, 다른 클래스의 디스크를 사용하고 있습니다. 어떤 이유로 든 디스크를 사용할 수 없습니다. 배열과 요청합니다. 나, 방법을 만들 어쨌든이 주위에 얻을 수 있습니까? –