使用 DefaultListModel 将项目从 ArrayList 添加到 JList

Posted

技术标签:

【中文标题】使用 DefaultListModel 将项目从 ArrayList 添加到 JList【英文标题】:Adding items to a JList from ArrayList using DefaultListModel 【发布时间】:2012-01-05 08:24:12 【问题描述】:

我正在尝试将 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 不是每个项目添加一个,而是添加多个项目。我只是想知道为什么会这样?

【问题讨论】:

您必须执行两次 UpdateJList() 代码,因此项目会被添加两次。发布您的 SSCCE 来证明问题。 是重复调用 UpdateJList 还是只调用一次?可能值得在方法中添加一个日志,以确保它只被调用一次。我想,你可能想在模型开始时对模型做一个 .clear() ,因为你将它用作类级别的变量。 @aishwarya - 谢谢先生 :) 清除模型解决了问题 :) 请学习java命名约定并遵守它们 【参考方案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);

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

【讨论】:

以上是关于使用 DefaultListModel 将项目从 ArrayList 添加到 JList的主要内容,如果未能解决你的问题,请参考以下文章

从 JList 中删除所选项目

是否可以更改 Java Swing jList 中项目的名称*显示*?

在JFrame中显示数组

JList 元素上的双击事件

Jlist详解

是否有在JList中使用Enum的方法