`
snoopy7713
  • 浏览: 1152593 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

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

    博客分类:
  • RAP
阅读更多

1,简单显示,表格的式样见注释中的内容

Java代码  收藏代码
  1. import  org.eclipse.jface.viewers.TableViewer;  
  2. import  org.eclipse.swt.SWT;  
  3. import  org.eclipse.swt.widgets.Display;  
  4. import  org.eclipse.swt.widgets.Shell;  
  5. import  org.eclipse.swt.widgets.Table;  
  6. import  org.eclipse.swt.widgets.TableColumn;  
  7.   
  8. public   class  TestTableViewer {  
  9.     private   static  Table table;  
  10.     /** */ /**  
  11.      * Launch the application  
  12.      * @param args  
  13.      */   
  14.     public   static   void  main(String[] args) {  
  15.         final  Display display = Display.getDefault();  
  16.         final  Shell shell =  new  Shell();  
  17.         shell.setSize(500 375 );  
  18.         shell.setText("SWT Application" );  
  19.         //注意这里,SWT.NULTI代表可以选择多行,SWT.FULL_SELECTION代表可以整行选择,SWT.BORDER边框,SWT.V_SCROLL ,SWT.H_SCROLL滚动条   
  20.         final  TableViewer tableViewer =  new  TableViewer(shell, SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER|SWT.V_SCROLL|SWT.H_SCROLL);  
  21.           
  22.         table = tableViewer.getTable();  
  23.         table.setLinesVisible(true );  
  24.         table.setHeaderVisible(true );  
  25.         table.setBounds(97 79 373 154 );  
  26.   
  27.         final  TableColumn newColumnTableColumn =  new  TableColumn(table, SWT.NONE);  
  28.         newColumnTableColumn.setWidth(39 );  
  29.         newColumnTableColumn.setText("ID" );  
  30.   
  31.         final  TableColumn newColumnTableColumn_1 =  new  TableColumn(table, SWT.NONE);  
  32.         newColumnTableColumn_1.setWidth(85 );  
  33.         newColumnTableColumn_1.setText("姓名" );  
  34.           
  35.         final  TableColumn newColumnTableColumn_2 =  new  TableColumn(table, SWT.NONE);  
  36.         newColumnTableColumn_2.setWidth(41 );  
  37.         newColumnTableColumn_2.setText("性别" );  
  38.   
  39.         final  TableColumn newColumnTableColumn_3 =  new  TableColumn(table, SWT.NONE);  
  40.         newColumnTableColumn_3.setWidth(43 );  
  41.         newColumnTableColumn_3.setText("年龄" );  
  42.   
  43.         final  TableColumn newColumnTableColumn_4 =  new  TableColumn(table, SWT.NONE);  
  44.         newColumnTableColumn_4.setWidth(126 );  
  45.         newColumnTableColumn_4.setText("创建日期" );  
  46.           
  47.         shell.open();  
  48.         while  (!shell.isDisposed()) {  
  49.             if  (!display.readAndDispatch())  
  50.                 display.sleep();  
  51.         }  
  52.     }  
  53. }  

 2,加入布局
显示的效果不好,我们要加入布局,让view填充整个画面在shell.open()后加上
ok,效果达到
3,为TableViewer加上数据,光突突的样子不好看。这里是demo所以不再从数据库里边取数据了。自己构造一个List用来做数据。实际使用中也是这么使用,不过不同的是这里是随意构造的list,而显示实际使用中是从数据库取出数据构造list.
(1)构造一个people类,同时给People类提供一个构造假数据的方法getPeople()

Java代码  收藏代码
  1. import  java.util.ArrayList;  
  2. import  java.util.Date;  
  3. import  java.util.List;  
  4. public   class  People{  
  5.     private  Long id;  
  6.     private  String name;  
  7.     private  String sex;  
  8.     private  Integer age;  
  9.     private  Date createDate;  
  10.     public  People(Long id,String name,String sex,Integer age,Date createDate){  
  11.         this .id = id;  
  12.         this .name = name;  
  13.         this .sex = sex;  
  14.         this .age = age;  
  15.         this .createDate = createDate;  
  16.     }  
  17.     public  Integer getAge() {  
  18.         return  age;  
  19.     }  
  20.     public   void  setAge(Integer age) {  
  21.         this .age = age;  
  22.     }  
  23.     public  Date getCreateDate() {  
  24.         return  createDate;  
  25.     }  
  26.     public   void  setCreateDate(Date createDate) {  
  27.         this .createDate = createDate;  
  28.     }  
  29.     public  Long getId() {  
  30.         return  id;  
  31.     }  
  32.     public   void  setId(Long id) {  
  33.         this .id = id;  
  34.     }  
  35.     public  String getName() {  
  36.         return  name;  
  37.     }  
  38.     public   void  setName(String name) {  
  39.         this .name = name;  
  40.     }  
  41.     public  String getSex() {  
  42.         return  sex;  
  43.     }  
  44.     public   void  setSex(String sex) {  
  45.         this .sex = sex;  
  46.     }  
  47.     public   static  List getPeople(){  
  48.         List list = new  ArrayList();  
  49.         int  n =  30 ;  
  50.         for ( int  i= 1 ;i<n;i++){  
  51.             Long id = new  Long(i);  
  52.             String name = "张" +i;  
  53.             String sex = "男" ;  
  54.             if ((i% 2 ) ==  0 ){  
  55.                 sex = "女" ;  
  56.             }  
  57.             Integer age;  
  58.             if (i< 10 ){  
  59.                 age = new  Integer(i* 10 );  
  60.             }else   if (i> 10  && i< 100 ){  
  61.                 age = new  Integer(i);  
  62.             }else   if (i> 100  && i< 1000 ){  
  63.                 age = new  Integer(i/ 10 );  
  64.             }else {  
  65.                 age = new  Integer( 22 );  
  66.             }  
  67.             Date createDate = new  Date();  
  68.             People people = new  People(id,name,sex,age,createDate);  
  69.             list.add(people);  
  70.         }  
  71.         return  list;  
  72.     }  
  73. }  

 

(2)给tableViewer提供内容器(IStructuredContentPorvider)和标签器(ITableLabelProvider)
如 果想一个tableviewer显示数据,那必须给它提供内容器和标签器,内容器的作用是从List(也可以是其他的集合类)中提取出一个对象(例如 People对应着表格的一行,数据库的一条记录),标签器的作用是从一个对象中提取出一个字段(例如年龄,对应着表格中的一个单元格,数据库中某一列的 一个值)下边是内容器和标签器的代码:
内容器:

Java代码  收藏代码
  1. import  java.util.List;  
  2.   
  3. import  org.eclipse.jface.viewers.IStructuredContentProvider;  
  4. import  org.eclipse.jface.viewers.Viewer;  
  5.   
  6. public   class  ContentProvider  implements  IStructuredContentProvider {  
  7.         public  Object[] getElements(Object inputElement) {  
  8.             if (inputElement  instanceof  List){  
  9.                 return  ((List)inputElement).toArray();  
  10.             }else {  
  11.                 return   new  Object[ 0 ];  
  12.             }  
  13.         }  
  14.         public   void  dispose() {  
  15.         }  
  16.         public   void  inputChanged(Viewer viewer, Object oldInput, Object newInput) {  
  17.         }  
  18.     }  

 

标签器:

Java代码  收藏代码
  1. import  java.text.SimpleDateFormat;  
  2.   
  3. import  org.eclipse.jface.viewers.ITableLabelProvider;  
  4. import  org.eclipse.jface.viewers.LabelProvider;  
  5. import  org.eclipse.swt.graphics.Image;  
  6.   
  7. public   class  TableLabelProvider  extends  LabelProvider  implements  ITableLabelProvider {  
  8.         public  String getColumnText(Object element,  int  columnIndex) {  
  9.             if  (element  instanceof  People){  
  10.                 People p = (People)element;  
  11.                 if (columnIndex ==  0 ){  
  12.                     return  p.getId().toString();  
  13.                 }else   if (columnIndex ==  1 ){  
  14.                     return  p.getName();  
  15.                 }else   if  (columnIndex == 2 ){  
  16.                     return  p.getSex();  
  17.                 }else   if  (columnIndex ==  3 ){  
  18.                     return  p.getAge().toString();  
  19.                 }else   if  (columnIndex ==  4 ){  
  20.                     SimpleDateFormat sdf = new  SimpleDateFormat( "yyyy-MM-dd" );  
  21.                     return  sdf.format(p.getCreateDate());  
  22.                 }  
  23.             }  
  24.             return   null ;  
  25.         }  
  26.         public  Image getColumnImage(Object element,  int  columnIndex) {  
  27.             return   null ;  
  28.         }  
  29.     }  

 

注意这里:extends LabelProvider,为什么要加这个呢? 因为如果不加这个,因为实现 ITableLabelProvider 的缘故我们还要写四个空函数,而我们本身不需要在这四个空函数中实现什么,所以让它继承自LabelProvider,就可以避免四个空函数。
(3)把标签器和内容器给tableviewer
在shell.open()前边加上这几行

Java代码  收藏代码
  1. //设置内容器   
  2. tableViewer.setContentProvider(new  ContentProvider());  
  3. //设置标签器   
  4. tableViewer.setLabelProvider(new  TableLabelProvider());  
  5. //把数据集合给tableView   
  6. tableViewer.setInput(People.getPeople());  
  7. //这样利用内容器和标签器就能从setInput得到的数据集合分解出显示表格需要的数据。这是一个典型的mvc的实现.   

 4,样式改变
如果想在每一列前加入一个checkbox
只需要在开始的式样中加入SWT.CHECK

分享到:
评论

相关推荐

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

    在本文中,我们将深入探讨如何使用Swt/Jface库中的`TableViewer`组件来创建一个功能丰富的表格,并实现用户可以直接在表格上编辑数据的功能。Swt/Jface是Eclipse平台的一部分,提供了一套用于构建图形用户界面(GUI...

    swt/jface tableViewer开发简化

    本篇文章将聚焦于SWT/JFace中的tableViewer组件的开发与简化。 首先,`tableViewer`是JFace库中用于展示表格数据的核心组件。它为开发者提供了一种方便的方式来显示和操作数据,同时处理了诸如排序、过滤等复杂功能...

    SWT/JFace从入门到精通

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

    SWT/JFace专题 --- SWT/JFace概述

    JFace 建立在SWT之上,提供了一层抽象,简化了GUI开发的复杂性。JFace的目标是通过提供数据绑定、视图模型、对话框和服务等高级构造,来提高开发者的生产力。例如,它使用模型-视图-控制器(MVC)架构,将数据管理与...

    SWT/Jface API 3.4

    SWT 是一个直接与操作系统进行交互的底层库,提供了丰富的控件和组件,而 JFace 建立在 SWT 之上,提供了一层抽象,简化了 GUI 的设计和实现,使其更易于管理和维护。 在 SWT/Jface API 3.4 版本中,我们关注以下几...

    eclipse swt/jface核心应用源码

    5. 表格和树的模型(Table and Tree Models):SWT和JFace提供了处理表格和树数据的类,如`TableViewer`和`TreeViewer`,它们支持数据的过滤、排序和分页。 6. 事件处理(Event Handling):SWT和JFace使用监听器...

    SWT/JFACE API

    SWT是底层的UI库,提供了与操作系统原生控件直接交互的能力,而JFace是在SWT基础上提供的一层抽象,简化了UI开发并引入了模型-视图-控制器(MVC)设计模式。 **SWT API** SWT是IBM开发的一个轻量级GUI库,它直接与...

    swt/jface api帮助文档

    SWT (Standard Widget Toolkit) 和 JFace 是两个与Java GUI编程密切相关的库,它们是Eclipse项目的一部分。本文将深入探讨这两个库的核心概念、功能以及API的使用。 SWT是Java的一个GUI(图形用户界面)工具包,它...

    Eclipse SWT/JFace 核心应用的全部源代码

    其次,JFace是在SWT基础上构建的一层抽象,它简化了SWT的使用,提供了一种面向对象的API,使得开发人员可以更加专注于业务逻辑,而不是底层的GUI细节。JFace包括数据绑定、视图管理、对话框和服务等组件,它将许多...

    SWT/JFace分页

    SWT是Eclipse项目提供的一种用于创建本地化图形用户界面(GUI)的开源库,而JFace是在SWT基础上构建的更高级别的抽象层,它简化了UI开发,提供了数据绑定和事件处理等功能。 **SWT和JFace的基础知识** SWT是一个与...

    Ecilpse的SWT/JFace例子

    例如,JFace的Dialogs、Views和TableViewer等类,为常见的对话框和表格显示提供了高级接口,使得代码更简洁,易于维护。 在"Ecilpse的SWT/JFace例子"中,我们可以期待学习以下关键知识点: 1. **SWT控件的使用**:...

    SWT/JFace 3.5 API (CHM)

    在这种情况下,"SWT/JFace 3.5 API (CHM)"是一个包含了SWT和JFace 3.5版本所有公共类、接口和方法的详细文档。开发者可以通过这个CHM文件快速查找所需的信息,了解如何使用特定的API函数,从而高效地进行开发工作。 ...

    SWT/JFACE 资料

    JFace的控件通常比SWT的控件更具有面向对象的特性,例如它有TreeViewer和TableViewer,用于显示和操作树形和表格数据。此外,JFace还包括模型-视图-控制器(MVC)的设计模式,帮助开发者更好地组织代码结构。 在提供...

    SWT/JFace编程

    SWT(Standard Widget Toolkit)和JFace是两个与Java GUI编程密切相关的库,它们都是Eclipse项目的一部分。本文将深入探讨这两个技术,并基于提供的文件名"2-Basic.pdf"和"3-Advanced.pdf"来推测可能包含的基础知识...

    Eclipse Swt/Jface核心应用 (01-03章)

    在这三章中,你可能通过实例学习到如何创建一个简单的SWT应用,然后逐步引入JFace来提高代码的简洁性和可维护性。通过练习创建带有菜单、工具栏、表视图和对话框的应用,你将深入理解SWT和JFace的协同工作方式。 ...

    Eclipse Swt/Jface核心应用 (19-23章)

    Eclipse SWT(Standard Widget Toolkit)和JFace是用于构建Java图形用户界面(GUI)的库,它们在Eclipse IDE和许多其他基于Eclipse的应用程序中扮演着重要角色。本资料涵盖了Eclipse SWT/JFace的核心应用,包括第19...

    Eclipse Swt/Jface核心应用 (14-19章)

    2. **JFace概述**:JFace是建立在SWT之上的一个高级UI框架,它简化了SWT组件的使用,提供了模型-视图-控制器(MVC)架构,使得代码更加模块化,易于维护。JFace提供了对话框、表视图、树视图、数据绑定等功能,为...

    SWT/JFace API(English)

    3. **Viewer**:一个抽象的控件,用于显示和编辑数据集合,例如TreeViewer和TableViewer。 4. **Action**:封装UI操作,方便管理和绑定到控件。 5. ** Wizards** 和 **Pages**:用于创建向导式用户界面,通常用于...

    用swt/jface实现的资源浏览器jExplorer

    有问题欢迎来信讨论: talent_marquis@163.com&lt;br&gt;&lt;br&gt;才搜索了一下,发现jExplorer这个名字已经泛滥了 &lt;br&gt;最核心代码来自IBM的JFace教程 链接如下: ... &lt;br&gt;已经实现的基本功能: &lt;br&gt;1....

Global site tag (gtag.js) - Google Analytics