`

Swt/Jface tableViewer入门教程2

 
阅读更多
有一个功能是我们常使用的,就是在列的头上点击一下,整个表的记录按照这个列来排序,再点击一下按照这个列的反序来排序。那JFace是如何实现这个功能的呢? 在JFace中是通过一个排序器来实现的,就是ViewerSorter下边写出详细的步骤 一、定义一个sorter继承自ViewerSorter
import java.util.Date; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerSorter; public class Sorter extends ViewerSorter { private static final int ID = 1; private static final int NAME = 2; private static final int SEX = 3; private static final int AGE = 4; private static final int CREATE_DATE = 5; public static final Sorter ID_ASC = new Sorter(ID); public static final Sorter ID_DESC = new Sorter(-ID); public static final Sorter NAME_ASC = new Sorter(NAME); public static final Sorter NAME_DESC = new Sorter(-NAME); public static final Sorter SEX_ASC = new Sorter(SEX); public static final Sorter SEX_DESC = new Sorter(-SEX); public static final Sorter AGE_ASC = new Sorter(AGE); public static final Sorter AGE_DESC = new Sorter(-AGE); public static final Sorter CREATE_DATE_ASC = new Sorter(CREATE_DATE); public static final Sorter CREATE_DATE_DESC = new Sorter(-CREATE_DATE); private int sortType ; private Sorter(int sortType){ this.sortType = sortType; } public int compare(Viewer viewer, Object e1, Object e2) { People p1 = (People)e1; People p2 = (People)e2; switch(sortType){ case ID:{ Long l1 = p1.getId(); Long l2 = p2.getId(); return l1.compareTo(l2); } case -ID:{ Long l1 = p1.getId(); Long l2 = p2.getId(); return l2.compareTo(l1); } case NAME:{ String s1 = p1.getName(); String s2 = p2.getName(); return s1.compareTo(s2); } case -NAME:{ String s1 = p1.getName(); String s2 = p2.getName(); return s2.compareTo(s1); } case SEX:{ String s1 = p1.getSex(); String s2 = p2.getSex(); return s1.compareTo(s2); } case -SEX:{ String s1 = p1.getSex(); String s2 = p2.getSex(); return s2.compareTo(s1); } case AGE:{ Integer i1 = p1.getAge(); Integer i2 = p2.getAge(); return i1.compareTo(i2); } case -AGE:{ Integer i1 = p1.getAge(); Integer i2 = p2.getAge(); return i2.compareTo(i1); } case CREATE_DATE:{ Date d1 = p1.getCreateDate(); Date d2 = p2.getCreateDate(); d1.compareTo(d2); } case -CREATE_DATE:{ Date d1 = p1.getCreateDate(); Date d2 = p2.getCreateDate(); d2.compareTo(d1); } } return 0; } }
二、在TableViewer上,为每一列加入事件监听器类似这样的结构
newColumnTableColumn.addSelectionListener(new SelectionAdapter(){ boolean asc = true; public void widgetSelected(SelectionEvent e){ tableViewer.setSorter(asc?Sorter.ID_ASC:Sorter.ID_DESC); asc = !asc; } });
都加入后TestTableViewer的结果:
import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; public class TestTableViewer { private static Table table; /** *//** * Launch the application * @param args */ public static void main(String[] args) { final Display display = Display.getDefault(); final Shell shell = new Shell(); shell.setSize(500, 375); shell.setText("SWT Application"); // final TableViewer tableViewer = new TableViewer(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); final TableColumn newColumnTableColumn = new TableColumn(table, SWT.NONE); newColumnTableColumn.setWidth(39); newColumnTableColumn.setText("ID"); //加入事件监听器 newColumnTableColumn.addSelectionListener(new SelectionAdapter(){ boolean asc = true; public void widgetSelected(SelectionEvent e){ tableViewer.setSorter(asc?Sorter.ID_ASC:Sorter.ID_DESC); asc = !asc; } }); final TableColumn newColumnTableColumn_1 = new TableColumn(table, SWT.NONE); newColumnTableColumn_1.setWidth(85); newColumnTableColumn_1.setText("姓名"); // 加入事件监听器 newColumnTableColumn_1.addSelectionListener(new SelectionAdapter(){ boolean asc = true; public void widgetSelected(SelectionEvent e){ tableViewer.setSorter(asc?Sorter.NAME_ASC:Sorter.NAME_DESC); asc = !asc; } }); final TableColumn newColumnTableColumn_2 = new TableColumn(table, SWT.NONE); newColumnTableColumn_2.setWidth(41); newColumnTableColumn_2.setText("性别"); // 加入事件监听器 newColumnTableColumn_2.addSelectionListener(new SelectionAdapter(){ boolean asc = true; public void widgetSelected(SelectionEvent e){ tableViewer.setSorter(asc?Sorter.SEX_ASC:Sorter.SEX_DESC); asc = !asc; } }); final TableColumn newColumnTableColumn_3 = new TableColumn(table, SWT.NONE); newColumnTableColumn_3.setWidth(43); newColumnTableColumn_3.setText("年龄"); // 加入事件监听器 newColumnTableColumn_3.addSelectionListener(new SelectionAdapter(){ boolean asc = true; public void widgetSelected(SelectionEvent e){ tableViewer.setSorter(asc?Sorter.AGE_ASC:Sorter.AGE_DESC); asc = !asc; } }); final TableColumn newColumnTableColumn_4 = new TableColumn(table, SWT.NONE); newColumnTableColumn_4.setWidth(126); newColumnTableColumn_4.setText("创建日期"); // 加入事件监听器 newColumnTableColumn_4.addSelectionListener(new SelectionAdapter(){ boolean asc = true; public void widgetSelected(SelectionEvent e){ tableViewer.setSorter(asc?Sorter.CREATE_DATE_ASC:Sorter.CREATE_DATE_DESC); asc = !asc; } }); tableViewer.setContentProvider(new ContentProvider()); tableViewer.setLabelProvider(new TableLabelProvider()); tableViewer.setInput(People.getPeople()); shell.open(); shell.setLayout(new FillLayout()); shell.layout(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } } }
试一下结果是不是出来了? 好了,最后解释几点: 1,sorter中利用了jdk的compareTo来实现比较,当然你也可以根据自己的需求来实现。 2, sorter中利用了"-"符号来得到正负数字,用来表现升序、降序。
分享到:
评论

相关推荐

    Swt/Jface tableViewer入门教程一(显示tableViewer)

    在本文中,我们将深入探讨如何使用Swt/Jface库中的`tableViewer`组件来创建一个基本的表格视图。Swt(Standard Widget Toolkit)是Java中用于开发原生界面的应用程序开发工具包,而Jface是建立在Swt之上的抽象层,...

    Swt/Jface tableViewer入门教程三(加入在表格上直接编辑数据)

    这个教程对于理解Swt/Jface的`TableViewer`及其高级功能非常有帮助,同时也能提高用户与应用程序的交互性。在实际项目中,还可以结合`Filter`和`Sorter`类实现更复杂的功能,如数据过滤和排序,进一步增强表格的功能...

    SWT/JFace从入门到精通

    【SWT/JFace从入门到精通】 SWT(Standard Widget Toolkit)和JFace是Eclipse平台下用于构建图形用户界面(GUI)的两个关键库。它们为Java开发者提供了丰富的控件和高级UI功能,使创建桌面应用程序变得简单而强大。...

    The.Definitive.Guide.to.SWT.and.JFace.eBook-LiB

    2. JFace入门:讲解JFace的核心概念,如视图、编辑器和控制器,以及如何使用DataBinding进行数据驱动的UI开发。 3. RCP架构:详细阐述Eclipse RCP的插件系统,包括插件开发、依赖管理和部署。 4. 实战案例:通过实际...

    jface 入门例子

    2. **Viewer Framework**:JFace的`TableViewer`和`TreeViewer`提供了强大的表格和树形视图管理,支持数据模型、过滤、排序等功能。例如,创建一个表格展示数据: ```java Table table = new Table(shell, SWT....

    SWT&JFACE GEF or Eclipse Platform

    SWT(Standard Widget Toolkit)与JFace是Eclipse平台中用于构建图形用户界面(GUI)的重要工具包。它们提供了一种高效且可移植的方式来创建Java应用程序的用户界面,弥补了Java原生GUI库如AWT和Swing在界面效果和...

    swt入门范例新手适用,入门级

    这个“swt入门范例新手适用,入门级”压缩包很可能是为初学者准备的一系列示例代码,帮助他们快速掌握SWT的基本用法。 SWT作为GUI工具包,提供了丰富的组件,如按钮、文本框、列表、树视图等,用于构建用户界面。与...

    Eclipse从入门到精通2

    ### Eclipse从入门到精通2 —— JFace TableViewer详解 #### 概述 本文档针对CSDN上《Eclipse从入门到精通2》一书的部分更新内容进行了整合,主要聚焦于Eclipse环境下JFace框架的TableViewer组件的深入解析。...

    SWTJFace开发入门指南

    - **树和表视图**: JFace 的 TreeViewer 和 TableViewer 可以方便地展示复杂的数据结构,并支持过滤和排序功能。 **3. SWTJFace 开发流程** - **创建工作台(Workbench)**: 应用程序通常以 Workbench 作为起点,它...

    Eclipse从入门到精通

    SWT专注于底层的GUI控件实现,提供了丰富的组件和跨平台的支持,而JFace则建立在SWT之上,提供更高层次的应用程序框架,如视图、编辑器、对话框等。它们共同构成了Eclipse强大的GUI开发能力。 #### 开放式、可扩展...

Global site tag (gtag.js) - Google Analytics