在日常工作中,我们在使用表格浏览数据的时候,希望数据能按照一定的规则进行排序,这样查看起来会非常的方便,这时我们可以在表格中加入排序的功能,这样表格中的内容便可以按照一定的规则进行排序,下面我们来看看怎么给表格加上排序的功能,其实这个功能实现起来很简单,下面我们来看看怎么实现,
实现我们新建一个实现了 ViewerSorter 的类,比如名称为 UserInfoSorter .java
我们只有实现 compare 方便就可以了,其中这里的返回值为int型,返回类型一般有三种-1、0和1,其中-1表示倒序,0表示不进出操作,1表示正序,
我们来看看这里例子中的内容
/** 机构ID */
public static ViewerSorter userNameSorter0 = new UserInfoSorter(USERNAME);
/** */
public static ViewerSorter userNameSorter1 = new UserInfoSorter(-USERNAME);
/** */
public static ViewerSorter userIdSorter0 = new UserInfoSorter(USERID);
/** */
public static ViewerSorter userIdSorter1 = new UserInfoSorter(-USERID);
/** */
public static ViewerSorter positionSorter0 = new UserInfoSorter(POSITION);
/** */
public static ViewerSorter positionSorter1 = new UserInfoSorter(-POSITION);
/**
* 所要排序的列
*/
private int sortType;
public UserInfoSorter(int sortType) {
this.sortType = sortType;
}
public int compare(Viewer viewer, Object obj1, Object obj2) {
User param1 = (User) obj1;
User param2 = (User) obj2;
switch (sortType) {
case USERNAME: {
String id1 = param1.getUserName();
String id2 = param2.getUserName();
return id1.compareTo(id2);
}
case -USERNAME: {
String id1 = param1.getUserName();
String id2 = param2.getUserName();
return id2.compareTo(id1);
}
case USERID: {
String id1 = param1.getUserId();
String id2 = param2.getUserId();
return id1.compareTo(id2);
}
case -USERID: {
String id1 = param1.getUserId();
String id2 = param2.getUserId();
return id2.compareTo(id1);
}
case POSITION: {
String id1 = param1.getPosition();
String id2 = param2.getPosition();
return id1.compareTo(id2);
}
case -POSITION: {
String id1 = param1.getPosition();
String id2 = param2.getPosition();
return id2.compareTo(id1);
}
}
return 0;
}
}
我们从 compare方法中的参数提取出要比较的对象,进行对比排序,然后我们在相应的类中给表格添加事件处理排序,假如我们希望在显示名称的列名上单击的时候将这个列下所有的单元格进行排序可以这样
userNameCol.addSelectionListener(new SelectionAdapter() {
boolean sortType = true;
public void widgetSelected(SelectionEvent e) {
sortType = !sortType;
userInfoTableViewer.setSorter(sortType ? UserInfoSorter.userNameSorter0 : UserInfoSorter.userNameSorter1);
}
});
当点击名称列的时候就会排序了,我们看看一个比较完整的类
/**
* Launch the application
* @param args
*/
public static void main(String args[]) {
try {
UserInfoSorterTableApp window = new UserInfoSorterTableApp();
window.setBlockOnOpen(true);
window.open();
Display.getCurrent().dispose();
}
catch (Exception e) {
e.printStackTrace();
}
}
/**
* Configure the shell
* @param newShell
*/
@Override
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText("支持排序的表格");
}
/**
* Return the initial size of the window
*/
@Override
protected Point getInitialSize() {
return new Point(500, 375);
}
}
这样表格排序功能就实现了