Esta dica implementa um método que ordena todas as linhas em um DefaultTableModel de acordo com os valores da coluna.
DefaultTableModel model = new DefaultTableModel();
JTable table = new JTable(model); // Adiciona dados aqui... table.setAutoCreateColumnsFromModel(false); // Ordena todas as linhas de forma decrescente de acordo com os
// valores da segunda coluna do modelo
sortAllRowsBy(model, 1, false); // Os valores nulos de qualquer ordenação(crescente/decrescente) sempre
// aparecerão por último. colIndex especifica a coluna no modelos. public void sortAllRowsBy(DefaultTableModel model, int colIndex,
boolean ascending) {
Vector data = model.getDataVector();
Collections.sort(data, new ColumnSorter(colIndex, ascending));
model.fireTableStructureChanged();
} // Este comparador é usado classificar vetores dos dados
public class ColumnSorter implements Comparator {
int colIndex;
boolean ascending;
ColumnSorter(int colIndex, boolean ascending) {
this.colIndex = colIndex;
this.ascending = ascending;
}
public int compare(Object a, Object b) {
Vector v1 = (Vector)a;
Vector v2 = (Vector)b;
Object o1 = v1.get(colIndex);
Object o2 = v2.get(colIndex); if (o1 instanceof String && ((String)o1).length() == 0) {
o1 = null;
}
if (o2 instanceof String && ((String)o2).length() == 0) {
o2 = null;
} if (o1 == null && o2 == null) {
return 0;
} else if (o1 == null) {
return 1;
} else if (o2 == null) {
return -1;
} else if (o1 instanceof Comparable) {
if (ascending) {
return ((Comparable)o1).compareTo(o2);
} else {
return ((Comparable)o2).compareTo(o1);
}
} else {
if (ascending) {
return o1.toString().compareTo(o2.toString());
} else {
return o2.toString().compareTo(o1.toString());
}
}
}
}