我想对我的DefaultListModel
进行排序并让它解决内容更改事件,但我坚持使用它,并且不明白我怎么能调用它的fireContentsChanged方法。我看到如果我的模型扩展AbstractListModel
我可以在排序后直接调用fireContentsChanged,但是在我使用DefaultListModel完成我的类的方式中,我无法调用它的fireContentsChanged,因为它具有受保护的访问权限。我是否必须延长AbstractListModel
或者有办法调用DefaultListModel
fireContentsChanged?
public class DefaultDataModel implements DataModel
{
private DefaultListModel<Data> dataModel = new DefaultListModel<>();
@Override
public void addElement(Data data) {
dataModel.addElement(data);
}
@Override
public int getSize() {
return dataModel.getSize();
}
@Override
public Data getElementAt(int idx) {
return dataModel.getElementAt(idx);
}
@Override
public void addListDataListener(ListDataListener l) {
dataModel.addListDataListener(l);
}
@Override
public int indexOf(Data data) {
return dataModel.indexOf(data);
}
@Override
public List<Data> getAllData() {
return Collections.list(dataModel.elements());
}
@Override
public void sort() {
Collections.sort(getAllData());
}
}
答案 0 :(得分:1)
我发现如何在sort方法中执行此操作,我必须从dataModel侦听器列表中调用contentsChanged方法。
@Override
public void sort() {
Collections.sort(getAllData());
ListDataListener[] listeners = dataModel.getListDataListeners();
for(ListDataListener listener : listener) {
listener.contentsChanged(dataModel, ListDataEvent.CONTENTS_CHANGED, 0, getSize());
}
}