我已经实现了我的自定义列排序器,用于对
我桌子上的元素。
class FileColumnSorter extends SortableGrid.ColumnSorter
{
@Override
public void onSortColumn(SortableGrid sortableGrid, TableModelHelper.ColumnSortList columnSortList,
SortableGrid.ColumnSorterCallback columnSorterCallback)
....
}
初始化FixedWidthGrid时,我执行以下操作:
FixedWidthGrid dataTable = new FixedWidthGrid(rows, cols);
dataTable.setSelectionPolicy(SelectionGrid.SelectionPolicy.ONE_ROW);
dataTable.setColumnSorter(new FileColumnSorter());
滚动表按以下方式初始化:
FixedWidthFlexTable headerTable = createHeaderTable();
// Calling the lines described above
FixedWidthGrid fileListGrid = createDataTable
(currentDescriptorList.size(), 6);
// Combine the components into a ScrollTable
scrollTable = new ScrollTable(fileListGrid, headerTable);
scrollTable.setSortPolicy(AbstractScrollTable.SortPolicy.SINGLE_CELL);
scrollTable.setColumnSortable(0, false);
scrollTable.setColumnSortable(1, true);
scrollTable.setColumnSortable(2, true);
scrollTable.setColumnSortable(3, true);
scrollTable.setColumnSortable(4, true);
scrollTable.setColumnSortable(5, false);
当我运行应用程序时,我得到的是内置排序,而不是
自定义排序。我还尝试了以下操作:
ColumnSorter sorter = new FileColumnSorter();
FixedWidthGrid dataTable = new FixedWidthGrid(rows, cols) {
@Override
public ColumnSorter getColumnSorter()
{
return sorter;
}
};
以确保我的分拣机得到使用,但我仍然得到相同的
经验。
更新:添加了filecolumnsorter
class FileColumnSorter extends SortableGrid.ColumnSorter
{
@Override
public void onSortColumn(SortableGrid sortableGrid,
TableModelHelper.ColumnSortList columnSortList,
SortableGrid.ColumnSorterCallback columnSorterCallback)
{
final int column = columnSortList.getPrimaryColumn();
final Integer[] originalOrder = new Integer[sortableGrid.getRowCount()];
for (int i = 0; i < originalOrder.length; i++)
{
originalOrder[i] = i;
}
Arrays.sort(originalOrder, new Comparator<Integer>() {
public int compare(Integer first, Integer second)
{
Descriptor firstDesc = share.getCurrentDescriptors().get(first);
Descriptor secondDesc = share.getCurrentDescriptors().get(second);
if (firstDesc.getType().equals(secondDesc.getType()))
{
switch (column)
{
case 0:
return firstDesc.compareTo(secondDesc);
case 1:
return firstDesc.getName().compareTo(secondDesc.getName());
case 2:
return ((Long) firstDesc.getSize()).compareTo(secondDesc.getSize());
case 3:
return firstDesc.getCreated().compareTo(secondDesc.getCreated());
case 4:
return firstDesc.getModified().compareTo(secondDesc.getModified());
default:
return firstDesc.compareTo(secondDesc);
}
}
else
{
return firstDesc.getType() == Descriptor.FileItemType.FOLDER ? 1 : -1;
}
}
});
int[] resultOrder = new int[originalOrder.length];
for (int i = 0; i < originalOrder.length; i++)
{
if (columnSortList.isPrimaryAscending())
{
resultOrder[i] = originalOrder[i];
}
else
{
resultOrder[resultOrder.length - i - 1] = originalOrder[i];
}
}
columnSorterCallback.onSortingComplete(resultOrder);
}
}