我知道如何在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
?
或者你能找到更好的解决方案吗?
答案 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
。