在最近的一个程序中,遇到这么一个问题,实现JTable的导入数据,并带有添加,删除,修改等功能。基本功能实现后,由于程序方面的需要,保证程序的实用性,需要添加新功能:导入JTable的数据之后,或者添加,删除之后使JTable能自动进行排序。查阅相关资料后,以下相关实现方法:
首先需要对Table添加TableRowSorter。这一步很简单,部分code如下:
sorter = new TableRowSorter<HistroyDataTableMode>(histroyDataTableMode);
// 设置只有第一列可以排序,其他均不可以
sorter.setSortable(0, true);
for(int i=1; i<8; i++) {
sorter.setSortable(i, false);
}
histroyDataTable.setRowSorter(sorter);
添加上面的代码之后,此时的JTable应该就具备点击表头实现排序的功能了,当然本程序需要的JTable自动排序。百度,谷歌也没有人有过这样的写法,查阅API及相关资料后看到TableRowSorter有这么一个API:
setSortKeys
public void setSortKeys(List<? extends RowSorter.SortKey> sortKeys)
-
设置排序键。此方法创建所提供
List
的一个副本;对所提供List
的后续更改不影响此DefaultRowSorter
。如果排序键已更改,则此方法触发一个排序。 -
-
指定者:
-
类
RowSorter<M>
中的setSortKeys
-
类
-
-
参数:
-
sortKeys
- 新的SortKey
;null
是指定一个空列表的简单表示方法,表示视图应该是未排序的。
抛出:
-
IllegalArgumentException
- 如果sortKey
中的任一值为 null,或者有超出模型范围的列索引
-
public SortKey(int column, SortOrder sortOrder) {
if (sortOrder == null) {
throw new IllegalArgumentException(
"sort order must be non-null");
}
this.column = column;
this.sortOrder = sortOrder;
}
SortOrder参数跟踪进去:
public enum SortOrder {
/**
* Enumeration value indicating the items are sorted in increasing order.
* For example, the set <code>1, 4, 0</code> sorted in
* <code>ASCENDING</code> order is <code>0, 1, 4</code>.
*/
ASCENDING,
/**
* Enumeration value indicating the items are sorted in decreasing order.
* For example, the set <code>1, 4, 0</code> sorted in
* <code>DESCENDING</code> order is <code>4, 1, 0</code>.
*/
DESCENDING,
/**
* Enumeration value indicating the items are unordered.
* For example, the set <code>1, 4, 0</code> in
* <code>UNSORTED</code> order is <code>1, 4, 0</code>.
*/
UNSORTED
}
这下真相大白了,setSortKeys的参数是一个List,List类型是RowSorter.SortKey,SortKey的构造方法是一个列加上一个排序类型,那代码应如:
// 设置排序建
List<RowSorter.SortKey> sortKeys = new ArrayList<RowSorter.SortKey>();
sortKeys.add(new RowSorter.SortKey(0, SortOrder.ASCENDING));
sorter.setSortKeys(sortKeys);
当然,sortKeys是一个列,他可以add多个排序方式,按照我的理解,应该是优先使用第0个排序的方式,若有相同的,则继续按照第1个排序方式,以此类推。我这里仅仅是对0做了升序的排序,其他的应该都是一样。
哦,对了,需要注意的是setSortKeys这个方法的参数是可以为null,为null的意思则是不做排序。