使用DefaultListModel从ArrayList向JList添加项

时间:2011-11-24 05:06:04

标签: java swing arraylist jlist 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而不是添加每个项目之一,它会添加多个项目。我只是想知道为什么会这样?

1 个答案:

答案 0 :(得分:16)

如果您在更新方法之外定义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);
}

或者您可以尝试清除模型中的先前值,然后添加新值。