Обновление JList и ArrayList - PullRequest
1 голос
/ 25 июля 2011

Я хотел бы получить пример того, как обновить JList, когда я добавляю или удаляю элементы из ArrayList.

ArrayList является частью класса Model. Класс Model передается в представление (которое является JPanel, содержащим несколько компонентов Swing и JList, который я хочу обновить) через его конструктор. Класс модели также внедряется в класс, который считывает значения, полученные с сервера. Когда я получил данные с сервера, я добавил некоторые из них в свой arrayList, выполнив model.getArrayList (). Add (data). Когда я добавляю данные в arrayList, я хотел бы обновить JList на мой взгляд. Я хотел бы получить помощь о том, как связать мой ArrayList с моим JList.

Ответы [ 2 ]

6 голосов
/ 25 июля 2011

Вам необходимо использовать ListModel для управления добавлением и удалением элементов из JList.Учебник очень полезен: http://download.oracle.com/javase/tutorial/uiswing/components/list.html

Вот пример кода из учебника:

listModel = new DefaultListModel();
listModel.addElement("Jane Doe");

listModel.insertElementAt(employeeName.getText(), index);    

int index = list.getSelectedIndex();
listModel.remove(index);

Если у вас есть массив, вы можете создать свой собственный Список моделей вокруг него.

4 голосов
/ 25 июля 2011

Если вы создаете свой собственный ListModel, вы должны расширить AbstractListModel, а при реализации метода addElement вам необходимо вызвать fire -метод (для уведомленияпользовательский интерфейс для обновления), например:

public void addElement(MyObject obj) {
    myArrayList.add(obj);
    fireIntervalAdded(this, myArrayList.size()-1, myArrayList.size()-1);
}

Ваш пользовательский ListModel должен выглядеть примерно так:

public class MyListModel extends AbstractListModel {

    private final ArrayList<MyObject> myArrayList = new ArrayList<MyObject>();

    public void addElement(MyObject obj) {
        myArrayList.add(obj);
        fireIntervalAdded(this, myArrayList.size()-1, myArrayList.size()-1);
    }

    @Override
    public Object getElementAt(int index) { return myArrayList.get(index); }

    @Override
    public int getSize() { return myArrayList.size(); }
}
...