你可以代表你的“行”的List<String>
情况下,你必须从改变你的字符串参数在你的网格,列和数据提供者列表; 当然,你得叫updateRowData一个List<List<String>>
,而不是一个List<String>
。
您还需要每列一列的情况下,取出来的值通过索引列表的:
class IndexedColumn extends Column<List<String>, String> {
private final int index;
public IndexedColumn(int index) {
super(new EditTextCell());
this.index = index;
}
@Override
public String getValue(List<String> object) {
return object.get(this.index);
}
}
如何添加排序这个例子。 我尝试了ListHandler
但不知道如何比较List<String>
。 任何帮助表示赞赏。
您需要将添加ListHandler
到要单独对各栏排序。 有点像这样:
你必须一个getter方法添加到IndexedColumn
的index
:
class IndexedColumn extends Column<List<String>, String> {
private final int index;
public IndexedColumn(int index) {
super(new EditTextCell());
this.index = index;
}
@Override
public String getValue(List<String> object) {
return object.get(this.index);
}
public int getIndex(){
return index;
}
}
然后,你需要一个添加ListHandler
到CellTable
:
ListHandler<List<String>> columnSortHandler = new ListHandler<List<String>>(list);
columnSortHandler.setComparator(columnName, new Comparator<List<String>>() {
public int compare(List<String> o1, List<String> o2) {
if (o1 == o2) {
return 0;
}
// Compare the column.
if (o1 != null) {
int index = columnName.getIndex();
return (o2 != null) ? o1.get(index).compareTo(o2.get(index)) : 1;
}
return -1;
}
});
table.addColumnSortHandler(columnSortHandler);
在上面的示例list
是List<List<String>>
对象。 该columnName
是Column
对象。 你必须为要排序的每一列做到这一点。
不要忘了还叫.setSortable(true)
在每一个你会排序的列。
列排序的一个好基本的例子可以发现在这里 。 上面的代码是基于这个例子,但我用你的index
在IndexedColumn
,以获得正确的String
为列做比较。
下面是数据网格码
indexedColumn.setSortable(true);
sortHandler.setComparator((Column<T, ?>) indexedColumn, (Comparator<T>) indexedColumn.getComparator(true));
下面是实际的类
public class IndexedColumn extends Column<List<String>, String>
{
private Comparator<List<String>> forwardComparator;
private Comparator<List<String>> reverseComparator;
private final int index;
public IndexedColumn(int index)
{
super(new TextCell());
this.index = index;
}
@Override
public String getValue(List<String> object)
{
return object.get(index);
}
public Comparator<List<String>> getComparator(final boolean reverse)
{
if (!reverse && forwardComparator != null)
{
return forwardComparator;
}
if (reverse && reverseComparator != null)
{
return reverseComparator;
}
Comparator<List<String>> comparator = new Comparator<List<String>>()
{
public int compare(List<String> o1, List<String> o2)
{
if (o1 == null && o2 == null)
{
return 0;
}
else if (o1 == null)
{
return reverse ? 1 : -1;
}
else if (o2 == null)
{
return reverse ? -1 : 1;
}
// Compare the column value.
String c1 = getValue(o1);
String c2 = getValue(o2);
if (c1 == null && c2 == null)
{
return 0;
}
else if (c1 == null)
{
return reverse ? 1 : -1;
}
else if (c2 == null)
{
return reverse ? -1 : 1;
}
int comparison = ((String) c1).compareTo(c2);
return reverse ? -comparison : comparison;
}
};
if (reverse)
{
reverseComparator = comparator;
}
else
{
forwardComparator = comparator;
}
return comparator;
}
}