2012-03-07 3 views
0

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

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

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

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

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

Thankyou.

+0

Вы просто пытаетесь получить имя компакт-диска, отображаемого в списке? – bvulaj

+0

По существу, да ... Просто хочу, чтобы элементы discsArray были элементами элементов. –

ответ

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

1

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

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

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

+0

Пробовал то, что вы сказали, но мы вызываем discsArray из другого класса ... но по какой-то причине он не позволит мне использовать discsArray и спрашивает мне создать метод и т. д., так или иначе, чтобы обойти это? –

Смежные вопросы