如何在GWT中对cellTable的复选框列进行排序?

如何在GWT中对cellTable的复选框列进行排序?,gwt,checkbox,Gwt,Checkbox,我知道如何在GWT中对cellTable的TextColumn进行排序 这就是setSortable(true)fortextColumn 然后声明ListHandler columnSortHandler=newListHandler(myTableList) 然后columnSortHandler.setComparator(textColumn,新的mycelltablecolumnscomparator(1)), 最后getView().getMyCellTable().addColum

我知道如何在GWT中对cellTable的TextColumn进行排序

这就是
setSortable(true)
for
textColumn

然后声明
ListHandler columnSortHandler=newListHandler(myTableList)

然后
columnSortHandler.setComparator(textColumn,新的mycelltablecolumnscomparator(1)),

最后
getView().getMyCellTable().addColumnSortHandler(columnSortHandler)

但如果我们有CheckBox列&我们想对CheckBox列进行排序。也就是说,当用户单击复选框列的标题时,它会将选中复选框的所有行置于顶部。如果用户再次单击复选框列的标题,它将使所有未选中复选框的行位于顶部。因此,对复选框列进行排序只有两种可能的选项,即选中和取消选中

我们声明复选框列如下:

Column<String[], Boolean> checkBoxColumn = new Column<String[], Boolean>(
                        new CheckboxCell(true, false)) {
  @Override
  public Boolean getValue(String[] object) {
      return mySelectionModel.isSelected(object);
  }
};

ckColumn.setSortable(true);
Column checkBoxColumn=新列(
新CheckboxCell(真、假)){
@凌驾
公共布尔getValue(字符串[]对象){
返回mySelectionModel.isSelected(对象);
}
};
ckColumn.setSortable(true);
但是,我们怎样才能为
checkBoxColumn
设置比较器呢


或者你能找到更好的解决方案吗?

我写了一个示例表,它应该是开箱即用的:

public class ExampleTable extends CellTable<MyObject> {

private ArrayList<MyObject> list;
private ListDataProvider<MyObject> dataProvider = new ListDataProvider<MyObject>();

public ExampleTable() {
    super();
    dataProvider.addDataDisplay(this);

    list = new ArrayList<MyObject>();
    for (int i = 0; i < 15; i++) {
        list.add(new MyObject("Value" + i, false));
    }

    dataProvider.setList(list);

    TextColumn<MyObject> textColumn = new TextColumn<MyObject>() {

        @Override
        public String getValue(MyObject object) {
            return object.getValue();
        }
    };
    this.addColumn(textColumn, "String");

    Column<MyObject, Boolean> checkBoxColumn = new Column<MyObject, Boolean>(
            new CheckboxCell(true, true)) {
        @Override
        public Boolean getValue(MyObject object) {

            return object.isEnabled();
        }
    };

    checkBoxColumn.setFieldUpdater(new FieldUpdater<MyObject, Boolean>() {

        @Override
        public void update(int index, MyObject object, Boolean value) {
            object.setEnabled(value);
        }
    });

    this.addColumn(checkBoxColumn, "Boolean");
    checkBoxColumn.setSortable(true);

    ListHandler<MyObject> columnSortHandler = new ListHandler<MyObject>(
            dataProvider.getList());

    columnSortHandler.setComparator(checkBoxColumn,
            new Comparator<MyObject>() {

                @Override
                public int compare(MyObject arg0, MyObject arg1) {
                    return (arg0.isEnabled() == arg1.isEnabled() ? 0
                            : (arg1.isEnabled() ? 1 : -1));
                }
            });
    this.addColumnSortHandler(columnSortHandler);

}

  };

创建
ListHandler
时,使用填充列表非常重要。如果您不想要可更新的布尔列,只需删除
字段更新程序

,那么在复选框列上设置比较器到底有什么问题?好的,我知道了,似乎复选框对排序没有影响,所以我只是比较checkBoxColumn,就像我对TextColumn所做的那样&它工作正常。无论如何,谢谢你的提示。我发现XCheckBoxColumn排序和TextColumn排序是一样的
public class MyObject {
private String value;
private boolean enabled;

public MyObject(String value, boolean status) {
    this.value = value;
    this.enabled = status;
}

public String getValue() {
    return value;
}

public void setValue(String value) {
    this.value = value;
}

public boolean isEnabled() {
    return enabled;
}

public void setEnabled(boolean status) {
    this.enabled = status;
}

}