import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import Template;
/**
* @author zhangdapeng
*/
public class CostomrViewSorter extends ViewerSorter {
// 每列对应一个不同的常量,正数表示要升序、相反数表示要降序
private static final int ID = 1;
private static final int NAME = 2;
// 给外界使用排序器对象
public static final CostomrViewSorter ID_ASC = new CostomrViewSorter(ID);
public static final CostomrViewSorter ID_DESC = new CostomrViewSorter(-ID);
public static final CostomrViewSorter NAME_ASC = new CostomrViewSorter(NAME);
public static final CostomrViewSorter NAME_DESC = new CostomrViewSorter(-NAME);
// 当前所要排序的列,取自上面的ID、NAME两值或其相反数
private int sortType;
// 构造函数用private,表示不能在外部创建CostomrViewSorter对象
private CostomrViewSorter(int sortType) {
this.sortType = sortType;
}
// 最关键的比较方法compare,改写自ViewerSorter。方法返回值是一个int值:正数则
// obj1移到obj2之前;零则obj1和obj2的位置不动;负数则obj1移到obj2之后
@Override
public int compare(Viewer viewer, Object obj1, Object obj2) {
// 传入两条记录(实体类),然后依列给出它们的先后顺序
Template o1 = (Template) obj1;
Template o2 = (Template) obj2;
switch (sortType) {
case ID: {
String l1 = o1.getNum();
String l2 = o2.getNum();
// Long的compareTo方法返回值有三个可能值1,0,-1:
// 如l1>l2则返回1;如l1=l2则返回0;如l1<l2则返回-1
return l1.compareTo(l2);
}
case -ID: {
String l1 = o1.getNum();
String l2 = o2.getNum();
return l2.compareTo(l1);
}
case NAME: {
String s1 = o1.getTem_name();
String s2 = o2.getTem_name();
return s1.compareTo(s2);
}
case -NAME: {
String s1 = o1.getTem_name();
String s2 = o2.getTem_name();
return s2.compareTo(s1);
}
}
return 0;
}
}
用法:
/**
* @author zhangdapeng
*
*/
public class CustomerManageView extends ViewPart {
...;
@Override
public void createPartControl(Composite parent) {
...;
ViewForm viewForm = new ViewForm(parent, SWT.NONE);
tableViewer = new TableViewer(parent, SWT.CHECK | SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
CheckboxTableViewer ctv = new CheckboxTableViewer(tableViewer.getTable());
table = tableViewer.getTable();
table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
table.setHeaderVisible(true); // 显示表头
table.setLinesVisible(true); // 显示表格线
TableLayout layout = new TableLayout(); // 专用于表格的布局
table.setLayout(layout);
layout.addColumnData(new ColumnWeightData(13));// ID列宽13像素
TableColumn col1 = new TableColumn(table, SWT.NONE);
col1.setText("客户名称");//
col1.addSelectionListener(new SelectionAdapter() {
boolean asc = true; // 记录上一次的排序方式,默认为升序
public void widgetSelected(SelectionEvent e) {
// asc=true则ID的升序排序器,否则用降序
tableViewer.setSorter(asc ? CostomrViewSorter.ID_ASC : CostomrViewSorter.ID_DESC);
asc = !asc;// 得到下一次排序方式
}
});
...;
}
...;
}