Díky. To mě také napadlo, že by to bylo dobré. Jenže problem je v tom, že mi nejde vytvořit jiný comparator než stringový.
V abstractTableModelu mám v metodě: public Object getValueAt(int rowIndex, int columnIndex)
return personList.get(row);
v personList je seznam všech Person
Ta třída Person má v toString(), aby vracela String name;
A takhle nyní vypadá ta třída pro řazení tabulky:
private class PersonsRowSorter extends TableRowSorter<PersonTableModel> {
public PersonsRowSorter(PersonTableModel model) {
super(model);
}
@Override
public Comparator<?> getComparator(int column) {
if (getColumnName(column).equals("jmeno")) {
return personComparator();
} else {
return super.getComparator(column);
}
}
private Comparator<Person> personComparator() {
Comparator<Person> comparator = new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return 0;
}
};
return comparator;
}
}
Ale po kliknutí na hlavičku tabulky vyběhne chyba: ClassCastException - String cannot be cast to Person
A pokud použiji String moc mi to nepomůže, protože nevím jaký záznam se porovnává, znám jen ty dva porovnávané řetězce. Pokud bych se dokázal dostat v tom coparatoru i na hodnoty v ostatních sloupcích, už by to bylo dobré. Ale bohužel nevím jak a nebo ani jak jinak to udělat. Nebo jestli to musím celé implementovat jiným způsobem?