0

我有一个 JList,我想为它提供我自己的 ListModel。我有一个包含条目的 LinkedHashMap。我对 AbstractListModel 进行了子类化。我想要实现的是,每当我从 Map 中删除一个元素时,我希望它反映在 JList 中(添加或删除元素甚至更新)。

编辑- 我正在尝试这样做的场景如下:我有一个 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);
        }


    }

请帮忙!

4

1 回答 1

2

您应该使用模型并向模型添加值,而不是直接使用和添加新值到地图,模型负责将值添加到底层地图触发适当的事件以刷新表视图:

public void add(Detector detector) {
    this.detectorsMap.put(detector.getId(), detector);
    this.detectors.add(detector);
    fireIntervalAdded(detectors.size() - 1, detectors.size() - 1);
}

请注意,在需要时从检测器列表中重建新地图可能会更容易,以避免维护两个并行集合。

于 2013-10-08T18:04:54.740 回答