1

並べ替えてDefaultListModelコンテンツ変更イベントを発生させたいのですが、行き詰まっていて、fireContentsChangedメソッドを呼び出す方法がわかりません。モデルが拡張された場合AbstractListModel、並べ替え後にfireContentsChangedを直接呼び出すことができますが、DefaultListModelを使用してクラスを実行した方法では、アクセスが保護されているため、fireContentsChangedを呼び出すことができません。拡張する必要がありますか、それともfireContentsChangedAbstractListModel を呼び出す方法がありますか?DefaultListModel

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メソッドを呼び出さなければならないsortメソッドでそれを行う方法を見つけました。

@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 に答える