对DefaultListModel进行排序

时间:2012-11-19 20:59:33

标签: java defaultlistmodel

我想对我的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());
  }
}

1 个答案:

答案 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());
    }
}