有一个功能是我们常使用的,就是在列的头上点击一下,整个表的记录按照这个列来排序,再点击一下按照这个列的反序来排序。那JFace是如何实现这个功能的呢?
在JFace中是通过一个排序器来实现的,就是ViewerSorter下边写出详细的步骤
一、定义一个sorter继承自ViewerSorter
importjava.util.Date;
importorg.eclipse.jface.viewers.Viewer;
importorg.eclipse.jface.viewers.ViewerSorter;
publicclassSorterextendsViewerSorter{
privatestaticfinalintID=1;
privatestaticfinalintNAME=2;
privatestaticfinalintSEX=3;
privatestaticfinalintAGE=4;
privatestaticfinalintCREATE_DATE=5;
publicstaticfinalSorterID_ASC=newSorter(ID);
publicstaticfinalSorterID_DESC=newSorter(-ID);
publicstaticfinalSorterNAME_ASC=newSorter(NAME);
publicstaticfinalSorterNAME_DESC=newSorter(-NAME);
publicstaticfinalSorterSEX_ASC=newSorter(SEX);
publicstaticfinalSorterSEX_DESC=newSorter(-SEX);
publicstaticfinalSorterAGE_ASC=newSorter(AGE);
publicstaticfinalSorterAGE_DESC=newSorter(-AGE);
publicstaticfinalSorterCREATE_DATE_ASC=newSorter(CREATE_DATE);
publicstaticfinalSorterCREATE_DATE_DESC=newSorter(-CREATE_DATE);
privateintsortType;
privateSorter(intsortType){
this.sortType=sortType;
}
publicintcompare(Viewerviewer,Objecte1,Objecte2){
Peoplep1=(People)e1;
Peoplep2=(People)e2;
switch(sortType){
caseID:{
Longl1=p1.getId();
Longl2=p2.getId();
returnl1.compareTo(l2);
}
case-ID:{
Longl1=p1.getId();
Longl2=p2.getId();
returnl2.compareTo(l1);
}
caseNAME:{
Strings1=p1.getName();
Strings2=p2.getName();
returns1.compareTo(s2);
}
case-NAME:{
Strings1=p1.getName();
Strings2=p2.getName();
returns2.compareTo(s1);
}
caseSEX:{
Strings1=p1.getSex();
Strings2=p2.getSex();
returns1.compareTo(s2);
}
case-SEX:{
Strings1=p1.getSex();
Strings2=p2.getSex();
returns2.compareTo(s1);
}
caseAGE:{
Integeri1=p1.getAge();
Integeri2=p2.getAge();
returni1.compareTo(i2);
}
case-AGE:{
Integeri1=p1.getAge();
Integeri2=p2.getAge();
returni2.compareTo(i1);
}
caseCREATE_DATE:{
Dated1=p1.getCreateDate();
Dated2=p2.getCreateDate();
d1.compareTo(d2);
}
case-CREATE_DATE:{
Dated1=p1.getCreateDate();
Dated2=p2.getCreateDate();
d2.compareTo(d1);
}
}
return0;
}
}
二、在TableViewer上,为每一列加入事件监听器类似这样的结构
newColumnTableColumn.addSelectionListener(newSelectionAdapter(){
booleanasc=true;
publicvoidwidgetSelected(SelectionEvente){
tableViewer.setSorter(asc?Sorter.ID_ASC:Sorter.ID_DESC);
asc=!asc;
}
});
都加入后TestTableViewer的结果:
importorg.eclipse.jface.viewers.TableViewer;
importorg.eclipse.swt.SWT;
importorg.eclipse.swt.events.SelectionAdapter;
importorg.eclipse.swt.events.SelectionEvent;
importorg.eclipse.swt.layout.FillLayout;
importorg.eclipse.swt.widgets.Display;
importorg.eclipse.swt.widgets.Shell;
importorg.eclipse.swt.widgets.Table;
importorg.eclipse.swt.widgets.TableColumn;
publicclassTestTableViewer{
privatestaticTabletable;
/***//**
*Launchtheapplication
*@paramargs
*/
publicstaticvoidmain(String[]args){
finalDisplaydisplay=Display.getDefault();
finalShellshell=newShell();
shell.setSize(500,375);
shell.setText("SWTApplication");
//
finalTableViewertableViewer=newTableViewer(shell,SWT.CHECK|SWT.MULTI|SWT.FULL_SELECTION|SWT.BORDER|SWT.V_SCROLL|SWT.H_SCROLL);
table=tableViewer.getTable();
table.setLinesVisible(true);
table.setHeaderVisible(true);
table.setBounds(97,79,373,154);
finalTableColumnnewColumnTableColumn=newTableColumn(table,SWT.NONE);
newColumnTableColumn.setWidth(39);
newColumnTableColumn.setText("ID");
//加入事件监听器
newColumnTableColumn.addSelectionListener(newSelectionAdapter(){
booleanasc=true;
publicvoidwidgetSelected(SelectionEvente){
tableViewer.setSorter(asc?Sorter.ID_ASC:Sorter.ID_DESC);
asc=!asc;
}
});
finalTableColumnnewColumnTableColumn_1=newTableColumn(table,SWT.NONE);
newColumnTableColumn_1.setWidth(85);
newColumnTableColumn_1.setText("姓名");
//加入事件监听器
newColumnTableColumn_1.addSelectionListener(newSelectionAdapter(){
booleanasc=true;
publicvoidwidgetSelected(SelectionEvente){
tableViewer.setSorter(asc?Sorter.NAME_ASC:Sorter.NAME_DESC);
asc=!asc;
}
});
finalTableColumnnewColumnTableColumn_2=newTableColumn(table,SWT.NONE);
newColumnTableColumn_2.setWidth(41);
newColumnTableColumn_2.setText("性别");
//加入事件监听器
newColumnTableColumn_2.addSelectionListener(newSelectionAdapter(){
booleanasc=true;
publicvoidwidgetSelected(SelectionEvente){
tableViewer.setSorter(asc?Sorter.SEX_ASC:Sorter.SEX_DESC);
asc=!asc;
}
});
finalTableColumnnewColumnTableColumn_3=newTableColumn(table,SWT.NONE);
newColumnTableColumn_3.setWidth(43);
newColumnTableColumn_3.setText("年龄");
//加入事件监听器
newColumnTableColumn_3.addSelectionListener(newSelectionAdapter(){
booleanasc=true;
publicvoidwidgetSelected(SelectionEvente){
tableViewer.setSorter(asc?Sorter.AGE_ASC:Sorter.AGE_DESC);
asc=!asc;
}
});
finalTableColumnnewColumnTableColumn_4=newTableColumn(table,SWT.NONE);
newColumnTableColumn_4.setWidth(126);
newColumnTableColumn_4.setText("创建日期");
//加入事件监听器
newColumnTableColumn_4.addSelectionListener(newSelectionAdapter(){
booleanasc=true;
publicvoidwidgetSelected(SelectionEvente){
tableViewer.setSorter(asc?Sorter.CREATE_DATE_ASC:Sorter.CREATE_DATE_DESC);
asc=!asc;
}
});
tableViewer.setContentProvider(newContentProvider());
tableViewer.setLabelProvider(newTableLabelProvider());
tableViewer.setInput(People.getPeople());
shell.open();
shell.setLayout(newFillLayout());
shell.layout();
while(!shell.isDisposed()){
if(!display.readAndDispatch())
display.sleep();
}
}
}
试一下结果是不是出来了?
好了,最后解释几点:
1,sorter中利用了jdk的compareTo来实现比较,当然你也可以根据自己的需求来实现。
2, sorter中利用了"-"符号来得到正负数字,用来表现升序、降序。
source下载:
http://www.blogjava.net/Files/dreamstone/jface-2.rar
分享到:
相关推荐
NULL 博文链接:https://marsvaadin.iteye.com/blog/1320182
NULL 博文链接:https://arizona.iteye.com/blog/526298
SWT/Jface 开发入门指南 介绍以下方面的内容: ? 设定 swt 以及 JFace 的开发环境 ? swt 的一些简单部件(widget)介绍 ? JFace 的一些入门性介绍 ? swt 和 JFace 的事件模式 ? 通过一些简单的例子说明如何利用 swt ...
NULL 博文链接:https://1299020954.iteye.com/blog/2231923
SWT/Jface API 3.4 SWT/Jface API 3.4 SWT/Jface API 3.4 SWT/Jface API 3.4
Eclipse SWT/JFace SWT JFace 实例 Eclipse SWT/JFace 书中 全部实例
SWT/JFACE API,是关于SWT/JFACE开发所用的API
swt/Jface用到的最基本的jar包
Eclipse SWT/JFace 核心应用光盘源码下载,解压后即可使用
Eclipse SWT/JFace 核心应用 带书签 Eclipse SWT/JFace
Eclipse SWT/JFace核心应用
SWT/JFace开发实例
本文档为swt/jface的api中文帮助文档。
eclipse swt/jface核心应用源代码 带视频,找了好久,希望可以帮到大家,跟书匹配
eclipse swt/jface核心应用 这本书的源代码
Eclipse从入门到精通中的SWT/JFace章节!
NULL 博文链接:https://niub.iteye.com/blog/1806580
中国Eclipse社区的SWT/JFace开发入门指南,很经典的,网页上还有原作者的博客上的图片不能显示了,通过整理找到了图片,并做成了PDF的。
基于 Java 桌面程序开发的图形库...本书主要讲解了如何使用 SWT 和 JFace 进行应用程序的开发,通过本书系统而全面的 SWT/JFace 知识学习,将帮助读者快 速开发出完美、实用的 GUI 程序,轻松完成繁琐的界面、菜单编程.