如何在GWT中对cellTable的CheckBox列进行排序?

时间:2014-04-19 15:31:25

标签: gwt checkbox

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

setSortable(true)

textColumn

然后声明ListHandler<String[]> columnSortHandler = new ListHandler<String[]>(myTableList);

然后columnSortHandler.setComparator(textColumn, new MyCellTableColumnComparator(1));

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

但是如果我们有CheckBox专栏和&amp;我们要对CheckBox列进行排序。也就是说,当用户单击CheckBox列的标题时,它会将CheckBox选中的所有行都置于顶部。如果用户再次单击CheckBox列的标题,则会将未选中CheckBox的所有行置于顶部。因此,对CheckBox列进行排序只有2种可能的选项,即检查&amp;未选中状态。

我们将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);

但是,setComparator我们如何checkBoxColumn

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

1 个答案:

答案 0 :(得分:0)

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

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

}

  };

MyObject只是一个简单的Pojo:

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

}

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