Добавление элементов в 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 вне метода, добавление увеличивает каждый элемент, IE вместо добавления одного из каждого элемента добавляет несколько элементов. Мне просто было интересно, почему это происходит?


person Ari    schedule 24.11.2011    source источник
comment
Вы должны выполнять код UpdateJList() дважды, чтобы элементы добавлялись дважды. Опубликуйте свой SSCCE, демонстрирующий проблему.   -  person camickr    schedule 24.11.2011
comment
это повторный вызов UpdateJList или только один вызов? возможно, стоит поместить журнал в метод, чтобы убедиться, что он вызывается только один раз. Я думаю, вы можете захотеть сделать .clear() для модели в начале модели, учитывая, что вы используете ее как переменную уровня класса.   -  person aishwarya    schedule 24.11.2011
comment
@aishwarya - Спасибо, сэр :) очистка модели решила проблему :)   -  person Ari    schedule 24.11.2011
comment
пожалуйста, изучите соглашения об именах Java и придерживайтесь их   -  person kleopatra    schedule 02.02.2012


Ответы (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);
}

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

person gprathour    schedule 24.11.2011