1,简单显示,表格的式样见注释中的内容
import org.eclipse.jface.viewers.tableviewer;
import org.eclipse.swt.swt;
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");
//注意这里,swt.nulti代表可以选择多行,swt.full_selection代表可以整行选择,swt.border边框,swt.v_scroll ,swt.h_scroll滚动条
final tableviewer tableviewer = new tableviewer(shell, 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");

final tablecolumn newcolumntablecolumn_1 = new tablecolumn(table, swt.none);
newcolumntablecolumn_1.setwidth(85);
newcolumntablecolumn_1.settext("姓名");
final tablecolumn newcolumntablecolumn_2 = new tablecolumn(table, swt.none);
newcolumntablecolumn_2.setwidth(41);
newcolumntablecolumn_2.settext("性别");

final tablecolumn newcolumntablecolumn_3 = new tablecolumn(table, swt.none);
newcolumntablecolumn_3.setwidth(43);
newcolumntablecolumn_3.settext("年龄");

final tablecolumn newcolumntablecolumn_4 = new tablecolumn(table, swt.none);
newcolumntablecolumn_4.setwidth(126);
newcolumntablecolumn_4.settext("创建日期");
shell.open();

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

public class people
{
private long id;
private string name;
private string sex;
private integer age;
private date createdate;

public people(long id,string name,string sex,integer age,date createdate)
{
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
this.createdate = createdate;
}

public integer getage()
{
return age;
}

public void setage(integer age)
{
this.age = age;
}

public date getcreatedate()
{
return createdate;
}

public void setcreatedate(date createdate)
{
this.createdate = createdate;
}

public long getid()
{
return id;
}

public void setid(long id)
{
this.id = id;
}

public string getname()
{
return name;
}

public void setname(string name)
{
this.name = name;
}

public string getsex()
{
return sex;
}

public void setsex(string sex)
{
this.sex = sex;
}

public static list getpeople()
{
list list = new arraylist();
int n = 30;

for(int i=1;i<n;i)
{
long id = new long(i);
string name = "张"i;
string sex = "男";

if((i%2) == 0)
{
sex = "女";
}
integer age;

if(i<10)
{
age = new integer(i*10);

}else if(i>10 && i<100)
{
age = new integer(i);

}else if(i>100 && i<1000)
{
age = new integer(i/10);

}else
{
age = new integer(22);
}
date createdate = new date();
people people = new people(id,name,sex,age,createdate);
list.add(people);
}
return list;
}
}
(2)给tableviewer提供内容器(istructuredcontentporvider)和标签器(itablelabelprovider)
如果想一个tableviewer显示数据,那必须给它提供内容器和标签器,内容器的作用是从list(也可以是其他的集合类)中提取出一个对象(例如people对应着表格的一行,数据库的一条记录),标签器的作用是从一个对象中提取出一个字段(例如年龄,对应着表格中的一个单元格,数据库中某一列的一个值)下边是内容器和标签器的代码:
内容器:
import java.util.list;

import org.eclipse.jface.viewers.istructuredcontentprovider;
import org.eclipse.jface.viewers.viewer;


public class contentprovider implements istructuredcontentprovider
{

public object[] getelements(object inputelement)
{

if(inputelement instanceof list)
{
return ((list)inputelement).toarray();

}else
{
return new object[0];
}
}

public void dispose()
{
}

public void inputchanged(viewer viewer, object oldinput, object newinput)
{
}
}
标签器:
import java.text.simpledateformat;

import org.eclipse.jface.viewers.itablelabelprovider;
import org.eclipse.jface.viewers.labelprovider;
import org.eclipse.swt.graphics.image;


public class tablelabelprovider extends labelprovider implements itablelabelprovider
{

public string getcolumntext(object element, int columnindex)
{

if (element instanceof people)
{
people p = (people)element;

if(columnindex == 0)
{
return p.getid().tostring();

}else if(columnindex == 1)
{
return p.getname();

}else if (columnindex ==2)
{
return p.getsex();

}else if (columnindex == 3)
{
return p.getage().tostring();

}else if (columnindex == 4)
{
simpledateformat sdf = new simpledateformat("yyyy-mm-dd");
return sdf.format(p.getcreatedate());
}
}
return null;
}

public image getcolumnimage(object element, int columnindex)
{
return null;
}
}
注意这里:extends labelprovider,为什么要加这个呢? 因为如果不加这个,因为实现 itablelabelprovider 的缘故我们还要写四个空函数,而我们本身不需要在这四个空函数中实现什么,所以让它继承自labelprovider,就可以避免四个空函数。
(3)把标签器和内容器给tableviewer
在shell.open()前边加上这几行
//设置内容器
tableviewer.setcontentprovider(new contentprovider());
//设置标签器
tableviewer.setlabelprovider(new tablelabelprovider());
//把数据集合给tableview
tableviewer.setinput(people.getpeople());
//这样利用内容器和标签器就能从setinput得到的数据集合分解出显示表格需要的数据。这是一个典型的mvc的实现.
4,样式改变
如果想在每一列前加入一个checkbox
只需要在开始的式样中加入swt.check
好了到此一个简单的样子选择出来了,但这仅仅是开始,下边将继续介绍按列排序、过滤器、行的颜色设置、在表格上直接编辑等功能
附上source: