Java 使用DefaultListModel从ArrayList向JLList添加项

Java 使用DefaultListModel从ArrayList向JLList添加项,java,swing,arraylist,jlist,defaultlistmodel,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

我正在尝试将
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);
}
private void updatejslist(){
DefaultListModel=新的DefaultListModel();
for(个人p:个人列表){
model.addElement(p.ToString());
}
clientJList.setModel(model);
clientJList.setSelectedIndex(0);
}

但是,如果我在方法之外声明
DefaultListModel
,则添加会增加每个项,即不是添加每个项中的一个,而是添加多个项。我只是想知道为什么会发生这种情况?

如果在更新方法之外定义
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);
}
DefaultListModel模型;
私有void updatejslist(){
model=新的DefaultListModel();
for(个人p:个人列表){
model.addElement(p.ToString());
}    
clientJList.setModel(model);
clientJList.setSelectedIndex(0);
}

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

您必须执行两次updatejslist()代码,以便添加两次项。您的帖子演示了这个问题。是重复调用UpdateJList还是只调用一次?可能值得在方法中添加日志,以确保只调用一次。我想,您可能希望在模型开始时对模型执行.clear(),因为您将其用作类级变量。@aishwarya-谢谢您,先生:)清除模型修复了问题:)请学习java命名约定并坚持它们