RCP表格排序

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;// 得到下一次排序方式
			}
		});	
	   ...;
	   }
	   ...;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值