Я написал класс util для инкапсуляции добавления сортируемого TextColumn в CellTable, который облегчит работу. Я уверен, что это будет развиваться в течение следующих нескольких дней, но вот что я работаю до сих пор ...
package your.package.here;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.ColumnSortEvent;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.view.client.ListDataProvider;
import java.util.Comparator;
/**
* Created by alex on 8/3/16.
*/
public class CellTableUtil
{
public static <D> void addSortableTextColumn(CellTable<D> table, ListDataProvider<D> dataProvider,
String columnTitle, final FieldExtractor<D, String> fieldExtractor)
{
final TextColumn<D> col = new TextColumn<D>()
{
@Override
public String getValue(D client)
{
return String.valueOf(fieldExtractor.getField(client));
}
};
col.setSortable(true);
table.addColumn(col, columnTitle);
ColumnSortEvent.ListHandler<D> columnSortHandler = new ColumnSortEvent.ListHandler<>(
dataProvider.getList());
columnSortHandler.setComparator(col,
new Comparator<D>() {
public int compare(D o1, D o2) {
if (o1 == o2) {
return 0;
}
// Compare the fields of the Client
if (o1 != null) {
return (o2 != null) ?
fieldExtractor.getField(o1).compareTo(fieldExtractor.getField(o2)) : 1;
}
return -1;
}
});
table.addColumnSortHandler(columnSortHandler);
}
/**
* Created by alex on 8/3/16.
*/
public static interface FieldExtractor<D, T>
{
public T getField(D dataEntity);
}
}
В моем коде тип данных, который я перечисляю в таблице, называется «Клиент», в котором есть метод getFirstName (). Теперь вы можете вызвать этот метод, чтобы добавить сортируемый столбец в вашу таблицу, например ...
CellTableUtil.addSortableTextColumn(table, dataProvider, "First Name",
new CellTableUtil.FieldExtractor<Client, String>() {
@Override
public String getField(Client c)
{
return c.getFirstName();
}
});