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

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

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

【问题讨论】:

标签: java swing arraylist jlist


【解决方案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 那么你需要编写更多的工作手动通知。
猜你喜欢
  • 2021-02-20
  • 2012-10-19
  • 1970-01-01
  • 1970-01-01
  • 2013-04-09
  • 2014-03-09
  • 2014-01-12
  • 2016-07-15
  • 2012-10-07
相关资源
最近更新 更多