rendered paste body/* * To change this template, choose Tools | Templates * and open the template in the editor. */package com.ownyx.list2;import com.ownyx.orreport.filter.ListDataAdapter;import java.util.Iterator;import java.util.Vector;import javax.swing.AbstractListModel;import javax.swing.event.ListDataEvent;import javax.swing.event.ListDataListener;/** * * @author mr */public class ListModelSorterer extends AbstractListModel { AbstractListModel delegate; Vector<Integer> sortIndex = new Vector<Integer>(); public ListModelSorterer(AbstractListModel delegate) { this.delegate = delegate; initSortererIndex(); delegate.addListDataListener(delegateListener); } void insert(int index) { // l'element à insérer Comparable e = (Comparable) delegate.getElementAt(index); Iterator iter = sortIndex.iterator(); Integer i = 0; if (!iter.hasNext()) { sortIndex.add(index); } else { while (iter.hasNext()) { i = (Integer) iter.next(); Comparable v = (Comparable) delegate.getElementAt(i); if (e.compareTo(v) < 0) { sortIndex.insertElementAt(index, i); break; } else if (!iter.hasNext()) { sortIndex.add(index); break; } } } fireIntervalAdded(this, i, i); } void initSortererIndex() { for (int i = 0; i < delegate.getSize(); i++) { insert(i); } } public int getSize() { return delegate.getSize(); } public Object getElementAt(int index) { return delegate.getElementAt(sortIndex.get(index)); } //////////////////////////////////////////// // LISTEN DELEGATE ABSTRACTLISTMODEL ListDataListener delegateListener = new ListDataAdapter() { @Override public void intervalAdded(ListDataEvent e) { insert(delegate.getSize() - 1); } @Override public void contentsChanged(ListDataEvent e) { initSortererIndex(); } };}