gpt4 book ai didi

java - 如何使 AbstractListModel 子类对 Collection 更改使用react?

转载 作者:行者123 更新时间:2023-12-02 06:39:54 27 4
gpt4 key购买 nike

我有一个 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com