设置初始标题的默认排序顺序单击gwt单元格表

设置初始标题的默认排序顺序单击gwt单元格表,gwt,gwt-celltable,Gwt,Gwt Celltable,我有一个GWT CellTable,它具有可排序的列,非常类似于开发人员指南示例() 但是,我希望某些列在默认情况下按降序排序,而不是按升序排序。也就是说,如果A列当前未排序,我单击它的标题,我希望A列在第一次单击时按降序排序,在第二次单击时按升序排序。但我仍然希望其他列按照当前的方式进行排序—在第一次单击时使用升序 除了使用Column.setSortable(boolean)方法设置可排序性和ColumnSortList.push(ColumnSortInfo)方法手动触发排序之外,似乎对该

我有一个GWT CellTable,它具有可排序的列,非常类似于开发人员指南示例()

但是,我希望某些列在默认情况下按降序排序,而不是按升序排序。也就是说,如果A列当前未排序,我单击它的标题,我希望A列在第一次单击时按降序排序,在第二次单击时按升序排序。但我仍然希望其他列按照当前的方式进行排序—在第一次单击时使用升序

除了使用Column.setSortable(boolean)方法设置可排序性和ColumnSortList.push(ColumnSortInfo)方法手动触发排序之外,似乎对该过程没有太多控制

有什么方法可以实现这个目标吗?

看看。(有人投了反对票,因为他/她不同意我的方法?)

这并不是你问题的答案,但它提倡你在尝试Celltable示例所示的任何东西之前先了解Celltable的基本知识

通过了解单元格/网格表的基本行为和要求,列的排序将清楚地表现出来


排序是通过提供比较器的实现来执行的。就我而言,我尝试了几种实现comparator的方法,以适应我希望列排序的各种方式。

我能够扩展
CellTable
,基本上通过覆盖与表关联的
ListHandler
OnColumnSortent(ColumnSortEvent)
方法来实现我想要的功能。这是实施的重点。我不得不在封面下做一些维护,以便在您准备再次排序时跟踪某个列是否已排序

有一件事让我感到困惑(在谷歌的例子中并不清楚),那就是使用
ColumnSortList.push()
方法实际上并不像单击那样触发排序,而是改变了列认为它是如何排序的基本状态

当我准备使用我制作的这张桌子时,我基本上做了以下工作:

SortedCellTable=新的SortedCellTable();
表.addColumn(冒号“一”,真);//可排序列
表.addColumn(colTwo,“two”,true)//可排序列
table.addColumn(colThree,“three”,false);//不可排序列
表.setDefaultSortOrder(冒号,true);//第一次单击时按升序排序
table.setDefaultSortOrder(colTwo,false);//第一次单击时按降序排序
表.setInitialSortColumn(colTwo);//设置数据后立即对此列进行排序
表.setComparator(colOne,colOneComp);//排序冒号时使用此比较器
表.setComparator(colTwo,colTwoComp);//在对colTwo进行排序时使用此比较器
面板。添加(表);//将表添加到我们的视图中
//…稍后,异步地。。。
table.setList(myRowObjectList);
以下是
SortedCellTable
实现:

公共类SortedCellTable扩展了CellTable{
/**
*跟踪当前已排序的列的步骤
*/
私有列currentlySortedColumn;
/**
*告诉我们最初对列进行排序的方式
*/
私有映射defaultSortOrderMap=newHashMap();
/**
*与其列关联的比较器
*/
私有映射比较器=新HashMap();
/**
*使用刷新数据提供程序列表时要排序的列
*{@link SortedCellTable#setList(List)}
*/
私有列initialSortColumn;
/**
*我们将附加到此表的数据提供程序
*/
私有ListDataProvider数据提供者;
/**
*特殊的列排序处理程序,将允许我们做更多的控制
*分类
*/
ListHandler-columnSortHandler;
公共分类小区表(){
超级();
dataProvider=新的ListDataProvider();
dataProvider.addDataDisplay(此);
columnSortHandler=新的ListHandler(dataProvider.getList()){
@凌驾
public void onColumnSort(ColumnSortEvent事件){
@抑制警告(“未选中”)
Column Column=(Column)event.getColumn();
if(列==null){
返回;
}
if(列等于(currentlySortedColumn)){
//默认行为
super.onColumnSort(事件);
}否则{
//初始排序;查找需要的方向
最终比较器比较器=比较器.get(列);
if(比较器==null){
返回;
}
布尔升序=defaultSortOrderMap.get(列);
if(升序==null | |升序){
//默认行为
super.onColumnSort(事件);
}否则{
//按降序对列排序
Collections.sort(getList(),new Comparator()){
公共整数比较(tO1,tO2){
返回-比较器。比较(o1,o2);
}
});
//在标题中设置正确的箭头
getColumnSortList().push(
新列sortinfo(列,false));
}
currentlySortedColumn=列;
}
}
@凌驾
public void setComparator(列,
比较器(比较器){
比较器。put(列,比较器);
super.setComparator(列,比较器);
}
};
添加columnSortHandler(columnSortHandler);
}
/**
*向表中添加列并设置其可排序状态
* 
*@param列
*@param headerName
*@param可排序
*/
public void addColumn(列、字符串标题名称、,
布尔值(可排序){
addColumn(列,标题名称);
列.setSortable(可排序);
如果(可排序){
defaultSortOrderMap.put(列,true);
}
}
/**
*向表中添加列并设置其可排序状态
*