Thread: sorting JTable
View Single Post
  #2 (permalink)  
Old 07-17-2007, 08:27 PM
cecily cecily is offline
Member
 
Join Date: Jul 2007
Posts: 33
cecily is on a distinguished road
This example implements a method that sorts all the rows in a DefaultTableModel based on the values of the column.
Code:
DefaultTableModel model = new DefaultTableModel(); JTable table = new JTable(model); // Add data here... // Disable autoCreateColumnsFromModel otherwise all the column customizations // and adjustments will be lost when the model data is sorted table.setAutoCreateColumnsFromModel(false); // Sort all the rows in descending order based on the // values in the second column of the model sortAllRowsBy(model, 1, false); // Regardless of sort order (ascending or descending), null values always appear last. // colIndex specifies a column in model. public void sortAllRowsBy(DefaultTableModel model, int colIndex, boolean ascending) { Vector data = model.getDataVector(); Collections.sort(data, new ColumnSorter(colIndex, ascending)); model.fireTableStructureChanged(); } // This comparator is used to sort vectors of data 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); // Treat empty strains like nulls if (o1 instanceof String && ((String)o1).length() == 0) { o1 = null; } if (o2 instanceof String && ((String)o2).length() == 0) { o2 = null; } // Sort nulls so they appear last, regardless // of sort order 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()); } } } }
Reply With Quote