Добавление элементов в JList из ArrayList с помощью DefaultListModel - PullRequest
7 голосов
/ 24 ноября 2011

Я пытаюсь добавить элементы с ArrayList в JList, который работает, когда я использую следующий код:

private void UpdateJList(){
    DefaultListModel<String> model = new DefaultListModel<String>();
    for(Person p : personList){
        model.addElement(p.ToString());
    }
    clientJList.setModel(model);
    clientJList.setSelectedIndex(0);
}

Однако, если я объявляю DefaultListModel вне метода, добавление увеличивает каждый элемент, т.е. вместо добавления одного из каждого элемента, оно добавляет несколько элементов. Мне просто интересно, почему это происходит?

1 Ответ

16 голосов
/ 24 ноября 2011

Если вы определяете DefaultListModel вне вашего метода обновления, тогда оно становится переменной экземпляра , поэтому оно будет иметь то же значение для одного экземпляра.Таким образом, если вы вызываете этот метод снова и снова из одного и того же экземпляра, он просто добавит больше значений в существующий список.Таким образом, он показывает несколько элементов.

ПРИМЕЧАНИЕ : объявление DefaultListModel внешней функции не вызывает каких-либо проблем, проблема заключается в том, что его объект вне функции является проблемой.Вы можете без проблем выполнить следующие действия:

DefaultListModel<String> model;

private void UpdateJList(){
    model = new DefaultListModel<String>();
    for(Person p : personList){
         model.addElement(p.ToString());
    }    
    clientJList.setModel(model);     
    clientJList.setSelectedIndex(0);
}

или попробуйте очистить предыдущие значения из вашей модели, а затем добавить новые значения.

...