【发布时间】:2013-10-08 17:17:07
【问题描述】:
我有一个 JList,我想为它提供我自己的 ListModel。我有一个包含条目的 LinkedHashMap。我对 AbstractListModel 进行了子类化。我想要实现的是,每当我从 Map 中删除一个元素时,我希望它反映在 JList 中(添加或删除元素甚至更新)。
EDIT- 我尝试这样做的场景如下:我有一个 JList 并添加、编辑和删除 JButton。我维护一个包含 Detectors 对象的 Map。当我单击添加按钮时,我想向 Map 添加一个新的 Detector 对象,同时我希望 JList 反映在新的添加中。编辑和删除也一样。
这是我目前所做的,但我不知道如何让模型响应更新:
private class DetectorsListModel extends AbstractListModel {
private List<Detector> detectors;
private Map<Long, Detector> detectorsMap;
public DetectorsListModel( Map<Long, Detector> detectorsMap) {
this.detectorsMap = detectorsMap;
detectors = new LinkedList<Detector>();
for ( Long detectorID : detectorsMap.keySet() ) {
detectors.add( detectorsMap.get(detectorID) );
}
}
@Override
public int getSize() {
// TODO Auto-generated method stub
return detectors.size();
}
@Override
public Detector getElementAt(int index) {
// TODO Auto-generated method stub
return detectors.get(index);
}
}
请帮忙!
【问题讨论】:
-
您需要调用 AbstractListModel 的相应 fireXXX 方法。
-
我在您的代码中没有看到任何
JList。也就是说,假设您在示例中实际上是指List,只是不要直接访问您的Map。这样,任何对您的DetectorsListModel的调用以更新地图都可以以相同的方法更新List。 -
而您的 XxxListModel 不完整,请在此处搜索帖子java+swing+jlist+abstractlistmodel
-
@camickr 你能看看我的编辑吗?
-
您的模型需要具有添加/删除方法,当您单击按钮时会调用这些方法。然后模型更新 Map 并调用适当的 fireXXX 方法。我不打算为你编写代码。上次我给你答复 (stackoverflow.com/questions/19212232/…) 时,你不欣赏帮助。