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

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

你可能感兴趣的:(rap,tooltip,tableViewer)