JList 和 ArrayList 更新

Posted

技术标签:

【中文标题】JList 和 ArrayList 更新【英文标题】:JList and ArrayList update 【发布时间】:2011-10-12 13:03:30 【问题描述】:

我想举例说明当我从 ArrayList 添加或删除元素时如何更新 JList。

ArrayList 是 Model 类的一部分。 Model 类通过其构造函数传递给视图(这是一个 JPanel,包含几个摆动组件,以及我要更新的 JList)。模型类也被注入到一个类中,该类读取从服务器接收到的值。当我从服务器接收到数据时,我通过执行 model.getArrayList().add(data) 将其中一些添加到我的 arrayList 中。当我向 arrayList 添加数据时,我想在我的视图中更新 JList。我想获得有关如何将我的 ArrayList 与我的 JList 链接的帮助。

【问题讨论】:

不是吗? ***.com/questions/6420623/… 【参考方案1】:

您需要使用 ListModel 来控制在 JList 中添加和删除项目。该教程非常有用: http://download.oracle.com/javase/tutorial/uiswing/components/list.html

以下是教程中的一些示例代码:

listModel = new DefaultListModel();
listModel.addElement("Jane Doe");

listModel.insertElementAt(employeeName.getText(), index);    

int index = list.getSelectedIndex();
listModel.remove(index);

如果你有一个数组列表,你可以围绕它构建自己的List Model。

【讨论】:

如何在每次向数组列表中添加元素时通知列表模型? 以ArrayList为后盾构建自己的List Model。【参考方案2】:

如果您创建自己的ListModel,则应扩展AbstractListModel,并且在实现addElement 方法时,您需要调用fire-方法(用于通知用户界面进行更新),比如:

public void addElement(MyObject obj) 
    myArrayList.add(obj);
    fireIntervalAdded(this, myArrayList.size()-1, myArrayList.size()-1);

您的自定义 ListModel 应如下所示:

public class MyListModel extends AbstractListModel 

    private final ArrayList<MyObject> myArrayList = new ArrayList<MyObject>();

    public void addElement(MyObject obj) 
        myArrayList.add(obj);
        fireIntervalAdded(this, myArrayList.size()-1, myArrayList.size()-1);
    

    @Override
    public Object getElementAt(int index)  return myArrayList.get(index); 

    @Override
    public int getSize()  return myArrayList.size(); 

【讨论】:

您好,如果我需要在我的模型类中创建 ListModel,那么我不需要 ArrayList。我可以使用 ListModel 代替吗? @wotan: 你的Model 类应该扩展AbstractListModel 并且你需要一个ArrayList 来包含你的元素。如果你想使用ListModel 那么你需要编写更多的工作手动通知。

以上是关于JList 和 ArrayList 更新的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在 JList 中显示数组列表?

JList 复制选择

将自定义对象从 JList 拖放到 JLabel

从 JLIST 中选择一个项目并使用来自该选定 id 的所有 db 信息更新一个表单

从 JList 取回数据