我有一个JList,我想用自己的ListModel提供它。我有一个包含条目的LinkedHashMap。我将AbstractListModel子类化。我想要实现的是,每当我从Map中删除一个元素时,我希望它反映在JList中(添加或删除元素甚至更新)。
编辑 - 我正在尝试这样做的场景如下:我有一个JList并添加,编辑和删除JButtons。我维护一个包含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);
}
}
请帮忙!
答案 0 :(得分:2)
您应该使用模型并向模型添加值,而不是直接使用和向地图添加新值,模型负责将值添加到基础地图和触发相应的事件刷新表视图:
public void add(Detector detector) {
this.detectorsMap.put(detector.getId(), detector);
this.detectors.add(detector);
fireIntervalAdded(detectors.size() - 1, detectors.size() - 1);
}
请注意,在需要时可能更容易从检测器列表重建新地图,以避免维护两个并行集合。