JList和ArrayList更新

时间:2011-07-25 11:57:05

标签: java swing arraylist jlist

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

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

2 个答案:

答案 0 :(得分:6)

您需要使用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);

如果你有一个arraylist,你可以围绕它建立自己的List Model

答案 1 :(得分:4)

如果您创建自己的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(); }
}