1

我想对我的进行排序DefaultListModel并让它触发内容更改事件,但我坚持使用它,并且不明白如何调用它的 fireContentsChanged 方法。我看到如果我的模型扩展,AbstractListModel我可以在排序后直接调用 fireContentsChanged,但是在我使用 DefaultListModel 上课的方式中,我不能调用它的 fireContentsChanged,因为它具有受保护的访问权限。我必须扩展AbstractListModel 还是有办法调用DefaultListModelfireContentsChanged ?

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

1 回答 1

1

我在排序方法中找到了如何做到这一点,我必须从 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());
    }
}
于 2012-11-20T07:12:30.417 回答