RCP表格排序

来源:互联网 发布:got it 和get it的区别 编辑:程序博客网 时间:2024/06/14 14:09
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之后@Overridepublic 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则返回-1return 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 {...;@Overridepublic 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;// 得到下一次排序方式}});   ...;   }   ...;}


0 0
原创粉丝点击