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