Die TableRowSorter Doku ist da recht ausführlich:
TableRowSorter uses Comparators for doing comparisons. The following defines how a Comparator is chosen for a column:
- If a Comparator has been specified for the column by the setComparator method, use it.
2 .If the column class as returned by getColumnClass is String, use the Comparator returned by Collator.getInstance().
- If the column class implements Comparable, use a Comparator that invokes the compareTo method.
- If a TableStringConverter has been specified, use it to convert the values to Strings and then use the Comparator returned by Collator.getInstance().
- Otherwise use the Comparator returned by Collator.getInstance() on the results from calling toString on the objects.
Eine von mehreren Möglichkeiten ist also
TableRowSorter<TableModel> sorter =
new TableRowSorter<TableModel>(table.getModel());
sorter.setComparator(3, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
});
table.setRowSorter(sorter);
Oder eingebaut in die „SimpleTableDemo“ aus How to Use Tables (The Java™ Tutorials > Creating a GUI With Swing > Using Swing Components) :
import java.awt.Dimension;
import java.awt.GridLayout;
import java.util.Comparator;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
public class SimpleTableDemo extends JPanel {
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
private static void createAndShowGUI() {
JFrame frame = new JFrame("SimpleTableDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
SimpleTableDemo newContentPane = new SimpleTableDemo();
newContentPane.setOpaque(true);
frame.setContentPane(newContentPane);
frame.pack();
frame.setVisible(true);
}
public SimpleTableDemo() {
super(new GridLayout(1, 0));
String[] columnNames = { "First Name", "Last Name", "Sport",
"# of Years", "Vegetarian" };
Object[][] data = {
{ "Kathy", "Smith", "Snowboarding", new Integer(5), new Boolean(false) },
{ "John", "Doe", "Rowing", new Integer(3), new Boolean(true) },
{ "Sue", "Black", "Knitting", new Integer(2), new Boolean(false) },
{ "Jane", "White", "Speed reading", new Integer(20), new Boolean(true) },
{ "Joe", "Brown", "Pool", new Integer(10), new Boolean(false) } };
final JTable table = new JTable(data, columnNames);
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
table.setFillsViewportHeight(true);
TableRowSorter<TableModel> sorter =
new TableRowSorter<TableModel>(table.getModel());
sorter.setComparator(3, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
});
table.setRowSorter(sorter);
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane);
}
}