我有一个 JList,我想为它提供我自己的 ListModel。我有一个包含条目的 LinkedHashMap。我对 AbstractListModel 进行了子类化。我想要实现的是,每当我从 Map 中删除一个元素时,我希望它能够反射(reflect)在 JList 中(添加或删除元素甚至更新)。
编辑-我尝试执行此操作的场景如下:我有一个 JList 并添加、编辑和删除 JButton。我维护一个包含探测器对象的 map 。当我单击“添加”按钮时,我想向 map 添加一个新的检测器对象,同时我希望 JList 反射(reflect)在新的添加中。编辑和删除也是如此。
这是我到目前为止所做的,但我不知道如何使模型响应更新:
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);
}
}
请帮忙!
最佳答案
您应该使用模型并向模型添加值,而不是直接使用新值并向 map 添加新值,模型负责将值添加到底层 map 并触发适当的事件刷新 TableView :
public void add(Detector detector) {
this.detectorsMap.put(detector.getId(), detector);
this.detectors.add(detector);
fireIntervalAdded(detectors.size() - 1, detectors.size() - 1);
}
请注意,在需要时从检测器列表重建新 map 可能会更容易,以避免维护两个并行集合。
关于java - 如何使 AbstractListModel 子类对 Collection 更改使用react?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19254167/