2012-03-07 61 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