利用ITableLabelProvider.getColumnText(Object element, int columnIndex) 方法获得text进行比较排序.
参照TableViewer Tutorial , 不需要对table的model再进行判断
final TableViewer tableViewer = new TableViewer(parent, SWT.BORDER | SWT.FULL_SELECTION);
final Table table = tableViewer.getTable();
TableViewerColumn columnViewer = new TableViewerColumn(tableViewer, SWT.NONE);
final TableColumn tableColumn = columnViewer.getColumn();
//listener to set sort column
tableColumn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
int dir = table.getSortDirection();
if (table.getSortColumn() == tableColumn) {
dir = dir == SWT.UP ? SWT.DOWN : SWT.UP;
} else {
dir = SWT.DOWN;
}
table.setSortDirection(dir);
table.setSortColumn(tableColumn);
tableViewer.refresh();
}
});
//label provider
tableViewer.setLabelProvider(new ITableLabelProvider() {
//add unimplemented methods here
});
//sorter
tableViewer.setSorter(new ViewerSorter() {
@Override
public int compare(Viewer viewer, Object e1, Object e2) {
TableViewer tableViewer = (TableViewer) viewer;
TableColumn sortColumn = tableViewer.getTable().getSortColumn();
if (sortColumn == null) {
return 0;
}
ITableLabelProvider labelProvider = (ITableLabelProvider) tableViewer
.getLabelProvider();
int columnIndex = tableViewer.getTable().indexOf(sortColumn);
if (columnIndex != -1) {
String text1 = labelProvider.getColumnText(e1, columnIndex);
String text2 = labelProvider.getColumnText(e2, columnIndex);
int rc = text1.compareTo(text2);
if (table.getSortDirection() == SWT.DOWN) {
rc = rc * -1;
}
return rc;
}
return 0;
}
});