Java Swing с использованием JList с ArrayList <> - PullRequest
0 голосов
/ 07 марта 2012

По сути, у меня есть библиотека CD, которая содержит экземпляры CD ArrayList <>, затем у меня есть люди ArrayList <>, которые могут «заимствовать» компакт-диски ... с этого компакт-диска, добавленные к доступномуили недоступный список.

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

Используя JList, я пытаюсь сделать элементы списка равными экземплярам CD.

Итак ... item1 в списке будетбыть CD с индексом 0, пункт 2 = индекс 1 и так далее ...

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

Спасибо.

Ответы [ 2 ]

2 голосов
/ 07 марта 2012

Ваш 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 голос
/ 07 марта 2012

Если у вас есть метод для получения имени компакт-диска, давайте назовем его getCDName (), вы можете попробовать

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

Это должно заполнить ваш массив записей.

...