对GWT单元格小组件中的不同属性进行排序

时间:2011-05-16 10:50:50

标签: java gwt event-handling

我有一个具有以下属性的celltable(功能,Total,Pass,Fail),我有一堆行。我想添加支持按字母顺序按特征(按文本)排序或按失败排序(整数)。请注意,我不想按功能和表格排序!我想单独按他们排序。我如何实现这一目标?

可以使用addColumnSortHandler方法添加列排序处理程序,但是当我选择任何可排序的列时会触发此处理程序。如果我添加多个列排序处理程序,则会触发所有比较器。如何确保仅使用我单击的列对数据进行排序。即如果我单击功能标题,它应按字母顺序排序。如果我单击“失败”,那么它应该按失败排序等等。

任何帮助将不胜感激。谢谢

这是一段代码片段

        final ListHandler<FeatureSummaryObject> failedColSortHandler = new ListHandler<FeatureSummaryObject>(dataProvider.getList());
        failedColSortHandler.setComparator(failedCol, new Comparator<FeatureSummaryObject>() {

            @Override
            public int compare(FeatureSummaryObject o1, FeatureSummaryObject o2) {
                return o1.getFailed() - o2.getFailed();
            }
        });
        table.addColumnSortHandler(failedColSortHandler);
        failedCol.setSortable(true);


        ListHandler<FeatureSummaryObject> featureColSortHandler = new ListHandler<FeatureSummaryObject>(dataProvider.getList());
        featureColSortHandler.setComparator(featureCol, new Comparator<FeatureSummaryObject>() {

            @Override
            public int compare(FeatureSummaryObject o1, FeatureSummaryObject o2) {
                return o1.feature.compareTo(o2.feature);
            }
        });
        table.addColumnSortHandler(featureColSortHandler);

        featureCol.setSortable(true);

此致

1 个答案:

答案 0 :(得分:4)

我正在使用CellTable来显示文件列表(文件名,大小,Mime类型)。我可以使用以下代码单击标题时按列进行排序:

首先,我将列标记为可排序:

   urlColumn.setSortable(true);
   mimeColumn.setSortable(true);
   sizeColumn.setSortable(true);

然后我为每列添加一个创建ColumnSortHandler,并像这样添加到表中:

   // Add sorting for the Name column
   ListHandler<Asset> urlSortHandler = new ListHandler<Asset>(dataProvider.getList());
   urlSortHandler.setComparator(urlColumn, new Comparator<Asset>() {
     public int compare(Asset o1, Asset o2) {
        ....
     }
   });
   table.addColumnSortHandler(urlSortHandler);

   // Add sorting for the Size column
   ListHandler<Asset> sizeSortHandler = new ListHandler<Asset>(dataProvider.getList());
   sizeSortHandler.setComparator(sizeColumn, new Comparator<Asset>() {
     public int compare(Asset o1, Asset o2) {
        ....
     }
   });
   table.addColumnSortHandler(sizeSortHandler);

   // Add sorting for the Type column
   ListHandler<Asset> mimeSortHandler = new ListHandler<Asset>(dataProvider.getList());
   mimeSortHandler.setComparator(mimeColumn, new Comparator<Asset>() {
      public int compare(Asset o1, Asset o2) {
         ...
      }
   });
   table.addColumnSortHandler(mimeSortHandler);

我添加了一些日志记录并验证了正在触发的相应排序处理程序(这意味着如果我单击文件名,则只调用文件名排序处理程序)。

希望此示例代码有所帮助。如果没有,请提供一些示例代码,以帮助我们更好地诊断问题