2012-03-07 62 views
0

基本上,我有一個保存CD ArrayList實例的CD庫,然後我有一個可以「借用」CD的人ArrayList < ...從該CD中添加到可用或不可用的列表中。使用JList和ArrayList的Java Swing <>

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); 

三江源。

+0

你只是試圖獲取列表中顯示的CD的名稱? – bvulaj 2012-03-07 16:25:13

+0

基本上,是的...只是想要discArray的元素是元素條目 – 2012-03-07 16:50:26

回答

2

您的CDStore可以實現接口ListModel。比你可以使用CDStore作爲你的JList的模型。

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 2012-03-07 17:12:29

1

如果您需要檢索CD名稱的方法,讓我們叫它getCDName(), 你可以嘗試

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

這在你的輸入數組應填寫。

+0

嘗試了你說的,但我們從另一個類別調用disksArray ...但無論什麼原因,它不會允許我使用disksArray並詢問我創造的方法等有無論如何解決這個問題? – 2012-03-07 16:19:15