给TableViewer添加排序器的方法:
1.创建一个ViewerSoorter类或者其子类;
2.把该类的对象赋值给TableViewer即可,如下所示:
org.eclipse.jface.viewers.ViewerSorter
viewer.setSorter(sorter);
public class AddressViewerSorter extends ViewerSorter {
private static final String TAG_DESENDING = "descending";
private static final String TAG_INDEX = "columnIndex";
private static final String TAG_CATEGORY = "category";
private static final String TAG_TRUE = "true";
private class SortInfo {
int columnIndex;
Comparator comparator;
boolean descending;
}
private TableViewer viewer;
private SortInfo[] infos;
private SortInfo currSort;
public AddressViewerSorter(TableViewer viewer, TableColumn[] columns,
Comparator[] comparators) {
this.viewer = viewer;
infos = new SortInfo[columns.length];
for (int i = 0; i < columns.length; i++) {
infos[i] = new SortInfo();
infos[i].columnIndex = i;
infos[i].comparator = comparators[i];
infos[i].descending = false;
createSelectionListener(columns[i], infos[i]);
}
currSort = infos[0];
}
public int compare(Viewer viewer, Object address1, Object address2) {
int result = currSort.comparator.compare(address1, address2);
if (result != 0) {
if (currSort.descending)
return -result;
return result;
}
return 0;
}
private void createSelectionListener(final TableColumn column,
final SortInfo info) {
column.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
currSort = info;
info.descending = !info.descending;
//调用该方法才能使viewer调用compare重新排序
viewer.refresh();
}
});
}
}