使用带有ArrayList<>的JList的Java Swing

时间:2012-03-07 15:51:05

标签: java swing arraylist jlist

基本上,我有一个CD库,其中包含CD ArrayList<>的实例,然后我得到了一个人ArrayList<>可以“借用”CD的......从该CD中添加到可用或不可用的列表中。

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

通过使用JList,我试图使列表的元素等于CD的实例。

所以...列表中的item1将是索引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);

三江源。

2 个答案:

答案 0 :(得分: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()
    }
}

答案 1 :(得分:1)

如果你有一个方法来检索CD名称,我们称之为getCDName(), 你可以尝试

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

这应填写您的条目数组。