我想举例说明在添加或删除ArrayList中的元素时如何更新JList。
ArrayList是Model类的一部分。 Model类通过其构造函数传递给视图(这是一个包含几个swing组件的JPanel,以及我想要更新的JList)。模型类也被注入一个类中,该类读取从服务器接收的值。当我从服务器接收数据时,我通过执行model.getArrayList()。add(data)将其中一些添加到我的arrayList中。当我向arrayList添加数据时,我想在我的视图中更新JList。我想帮助我如何将我的ArrayList与我的JList链接。
答案 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(); }
}