/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.ownyx.list2; 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 sortIndex = new Vector(); public ListModelSorterer(AbstractListModel delegate) { this.delegate = delegate; initSorterIndex(); delegate.addListDataListener(delegateListener); } void insert(int index) { int i = insertAsc(index); fireIntervalAdded(this, i, i); } void remove(int index) { ///////////////////////////////////////// // MARCHE PAS System.out.println("====================================="); System.out.println("value at "+index+" => "+sortIndex.get(index)); int v = sortIndex.get(index); sortIndex.removeElementAt(index); for (int i = 0; i < sortIndex.size(); i++) { if (sortIndex.get(i) > v) { System.out.println(sortIndex.get(i)+" decrement"); sortIndex.set(i, sortIndex.get(i) - 1); } } System.out.println("====================================="); fireIntervalRemoved(ListModelSorterer.this, index, index); } int insertAsc(int index) { // l'element à insérer Comparable e = (Comparable) delegate.getElementAt(index); int i; if (sortIndex.size() < 1) { sortIndex.add(index); i = 0; } else { for (i = 0; i < sortIndex.size(); i++) { Comparable v = (Comparable) delegate.getElementAt(sortIndex.get(i)); if (e.compareTo(v) < 0) { sortIndex.insertElementAt(index, i); break; } else if (i == sortIndex.size() - 1) { sortIndex.addElement(index); break; } } } return i; } int insertDesc(int index) { throw new UnsupportedOperationException(); } void initSorterIndex() { sortIndex.removeAllElements(); for (int i = 0; i < delegate.getSize(); i++) { insert(i); } } public int getSize() { return delegate.getSize(); } public Object getElementAt(int index) { //System.out.println(index + " " + sortIndex.get(index)); return delegate.getElementAt(sortIndex.get(index)); } //////////////////////////////////////////// // LISTEN DELEGATE ABSTRACTLISTMODEL ListDataListener delegateListener = new ListDataListener() { @Override public void intervalAdded(ListDataEvent e) { for (int i = e.getIndex0(); i <= e.getIndex1(); i++) { insert(i); } } @Override public void intervalRemoved(ListDataEvent e) { for (int i = e.getIndex0(); i <= e.getIndex1(); i++) { remove(i); } } @Override public void contentsChanged(ListDataEvent e) { initSorterIndex(); } }; }