Java Swing JTable开启排序功能只需一个调用:
JTable table = new JTable();
table.setAutoCreateRowSorter(true);
但这个排序功能只支持单列排序,而多列排序需要自己实现。
本文内容是使用sorter和renderer实现点击表头进行多列排序,第一次点击的列作为主排序列,后点击的列作为次排序列。建议在开始阅读本文前可以看看官方教程《How to Use Tables》,对JTable的sorter和renderer有个概念。
分析
TableRowSorter对象已经提供了多列排序的功能:
TableRowSorter sorter
= new TableRowSorter(table.getModel());
table.setRowSorter(sorter);
List sortKeys
= new ArrayList();
sortKeys.add(new RowSorter.SortKey(1, SortOrder.ASCENDING));
sortKeys.add(new RowSorter.SortKey(0, SortOrder.ASCENDING));
sorter.setSortKeys(sortKeys); // 执行排序
上面是把第1列作为主排序列升序排序,把第0列作为次排序列降序排序。
表格的表头由JTableHeader对象维护,该对象里维护着BaseTableHeaderUI对象,这个对象里设置了mouseInputListener监听器进行监听,当点击表头后就通知该监听器调用sorter.toggleSortOrder方法进行排序。所以我们需要继承T