您需要添加一个ListHandler
到您想要单独排序的每一列。有点像这样:
你必须添加一个 getter 方法IndexedColumn
为了index
:
class IndexedColumn extends Column<List<String>, String> {
private final int index;
public IndexedColumn(int index) {
super(new EditTextCell());
this.index = index;
}
@Override
public String getValue(List<String> object) {
return object.get(this.index);
}
public int getIndex(){
return index;
}
}
然后你需要添加一个ListHandler
to the CellTable
:
ListHandler<List<String>> columnSortHandler = new ListHandler<List<String>>(list);
columnSortHandler.setComparator(columnName, new Comparator<List<String>>() {
public int compare(List<String> o1, List<String> o2) {
if (o1 == o2) {
return 0;
}
// Compare the column.
if (o1 != null) {
int index = columnName.getIndex();
return (o2 != null) ? o1.get(index).compareTo(o2.get(index)) : 1;
}
return -1;
}
});
table.addColumnSortHandler(columnSortHandler);
在上面的例子中list
is the List<List<String>>
目的。这columnName
is the Column
目的。您必须对要排序的每一列执行此操作。
别忘了也打电话.setSortable(true)
在您要排序的每一列上。
可以找到一个很好的列排序基本示例here。上面的代码基于此示例,但我使用了您的index
in IndexedColumn
为了得到正确的String
以便列进行比较。