Добавление элементов в JList из ArrayList с помощью DefaultListModel

Я пытаюсь добавить элементы, которые находятся в 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 ответов


Если вы определите 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);
}

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