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