Java 如何使AbstractListModel子类对集合更改作出反应?
我有一个JList,我想为它提供我自己的ListModel。我有一个包含条目的LinkedHashMap。我对AbstractListModel进行了子类化。我想要实现的是,每当我从映射中删除一个元素时,我都希望它反映在JList中(添加或删除元素,甚至更新) 编辑-我尝试这样做的场景如下:我有一个JList,可以添加、编辑和删除JButtons。我维护一个包含探测器对象的地图。单击“添加”按钮时,我希望向地图添加一个新的探测器对象,同时希望JList通过新的添加反映出来。编辑和删除也一样 以下是我到目前为止所做的,但我不知道如何使模型响应更新:Java 如何使AbstractListModel子类对集合更改作出反应?,java,swing,jlist,Java,Swing,Jlist,我有一个JList,我想为它提供我自己的ListModel。我有一个包含条目的LinkedHashMap。我对AbstractListModel进行了子类化。我想要实现的是,每当我从映射中删除一个元素时,我都希望它反映在JList中(添加或删除元素,甚至更新) 编辑-我尝试这样做的场景如下:我有一个JList,可以添加、编辑和删除JButtons。我维护一个包含探测器对象的地图。单击“添加”按钮时,我希望向地图添加一个新的探测器对象,同时希望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);
}
}
private class detectorsModel扩展了AbstractListModel{
私人名单探测器;
专用地图检测器;
公共DetectorsModel(地图detectorsMap){
this.detectorsMap=detectorsMap;
检测器=新的LinkedList();
for(长检测器ID:detectorsMap.keySet()){
detectors.add(detectorsMap.get(detectorID));
}
}
@凌驾
公共int getSize(){
//TODO自动生成的方法存根
返回检测器。尺寸();
}
@凌驾
公共检测器getElementAt(内部索引){
//TODO自动生成的方法存根
返回检测器。获取(索引);
}
}
请帮忙 不应直接使用映射并向映射添加新值,而应使用模型并向模型添加值,该模型负责向基础映射添加值,并触发相应的事件以刷新表视图:
public void add(Detector detector) {
this.detectorsMap.put(detector.getId(), detector);
this.detectors.add(detector);
fireIntervalAdded(detectors.size() - 1, detectors.size() - 1);
}
请注意,在需要时从检测器列表重建新映射可能会更容易,以避免维护两个并行集合。您需要调用AbstractListModel的相应fireXXX方法。我在代码中没有看到任何
JList
。也就是说,假设您在示例中实际指的是列表
,只是不要直接访问地图
。这样,任何调用您的DetectorsListModel
来更新地图的调用都可以用相同的方法更新列表。如果您的XxxListModel未完成,请在post@camickr中搜索此处。您可以查看我的编辑吗?您的模型需要有添加/删除方法,您可以在单击按钮时调用这些方法。然后模型更新映射并调用适当的fireXXX方法。我不打算为你写代码。上次我给你答复时,你没有感激我的帮助。