package modelsorter; import java.util.Collections; import java.util.Comparator; import java.util.Vector; import javax.swing.AbstractListModel; public class PersonListModel extends AbstractListModel { Vector persons = new Vector(); public PersonListModel() { super(); setData(); } void setData() { persons.add(new Person("Pera", "Peric", 1980)); persons.add(new Person("Mitar", "Miric", 1989)); persons.add(new Person("Petar", "Miric", 1989)); persons.add(new Person("Mitar", "Miric", 1986)); persons.add(new Person("Saban", "Saulic", 1983)); persons.add(new Person("Marko", "Markovic", 1984)); } /* * sva komunikacija izmedju JList i ListModel-a se obavlja preko ova dva * metoda ispod. */ @Override public Object getElementAt(int arg0) { return persons.get(arg0); } @Override public int getSize() { return persons.size(); } void sortByLastName() { Collections.sort(persons); /* * kada se model prosledio JList komponenti implicitno se JList * komponenta postavila kao osluskivac dogadjaja koje "ispaljuje" taj * model */ fireContentsChanged(this, 0, getSize() - 1); } void sortByBirthYear() { Collections.sort(persons, new Comparator() { @Override public int compare(Person o1, Person o2) { if (o1.birthYear.compareTo(o2.birthYear) != 0) return o1.birthYear.compareTo(o2.birthYear); if (o1.lastName.compareTo(o2.lastName) != 0) return o1.lastName.compareTo(o2.lastName); return o1.firstName.compareTo(o2.firstName); } }); fireContentsChanged(this, 0, getSize() - 1); } }