1

您可以将“行”表示为List<String>实例,您必须在网格、列和数据提供程序中将参数化从字符串更改为列表;List<List<String>>当然,您必须使用 a而不是 a来调用 updateRowData List<String>

您还需要每列一个 Column 实例,按索引从 List 中取出值:

   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);
       }

   }

我如何在这个例子中添加排序。我尝试了ListHandler但不确定如何比较List<String>。任何帮助表示赞赏。

4

2 回答 2

1

您需要在ListHandler要单独排序的每一列中添加一个。有点像这样:

您必须为以下内容添加一个 getterIndexedColumn方法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一个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中是List<List<String>>对象。是columnName对象Column。您必须为要排序的每一列执行此操作。

不要忘记还调用.setSortable(true)您将排序的每一列。

可以在此处找到列排序的一个很好的基本示例。上面的代码基于此示例,但我使用了您indexIndexedColumnin 以获得正确String的列进行比较。

于 2013-03-04T00:41:23.667 回答
-1

这是数据网格代码

indexedColumn.setSortable(true);
sortHandler.setComparator((Column<T, ?>) indexedColumn, (Comparator<T>) indexedColumn.getComparator(true));

这是实际的课程

    public class IndexedColumn extends Column<List<String>, String>
{
   private Comparator<List<String>> forwardComparator;
   private Comparator<List<String>> reverseComparator;
   private final int index;

   public IndexedColumn(int index)
   {
      super(new TextCell());
      this.index = index;
   }

   @Override
   public String getValue(List<String> object)
   {
      return object.get(index);
   }

   public Comparator<List<String>> getComparator(final boolean reverse)
   {
      if (!reverse && forwardComparator != null)
      {
         return forwardComparator;
      }
      if (reverse && reverseComparator != null)
      {
         return reverseComparator;
      }
      Comparator<List<String>> comparator = new Comparator<List<String>>()
      {
         public int compare(List<String> o1, List<String> o2)
         {
            if (o1 == null && o2 == null)
            {
               return 0;
            }
            else if (o1 == null)
            {
               return reverse ? 1 : -1;
            }
            else if (o2 == null)
            {
               return reverse ? -1 : 1;
            }

            // Compare the column value.
            String c1 = getValue(o1);
            String c2 = getValue(o2);
            if (c1 == null && c2 == null)
            {
               return 0;
            }
            else if (c1 == null)
            {
               return reverse ? 1 : -1;
            }
            else if (c2 == null)
            {
               return reverse ? -1 : 1;
            }
            int comparison = ((String) c1).compareTo(c2);
            return reverse ? -comparison : comparison;
         }
      };

      if (reverse)
      {
         reverseComparator = comparator;
      }
      else
      {
         forwardComparator = comparator;
      }
      return comparator;
   }

}
于 2013-03-18T17:43:51.730 回答