Ordenando as linhas do JTable baseado nos valores da coluna

Veja nesta dica como implementar um método para ordenação das linhas de um JTable.

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());
                }
            }
        }
    }
Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados