1,简单显示,表格的式样见注释中的内容
importorg.eclipse.jface.viewers.TableViewer;
importorg.eclipse.swt.SWT;
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");
//注意这里,SWT.NULTI代表可以选择多行,SWT.FULL_SELECTION代表可以整行选择,SWT.BORDER边框,SWT.V_SCROLL ,SWT.H_SCROLL滚动条
finalTableViewertableViewer=newTableViewer(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);
finalTableColumnnewColumnTableColumn=newTableColumn(table,SWT.NONE);
newColumnTableColumn.setWidth(39);
newColumnTableColumn.setText("ID");
finalTableColumnnewColumnTableColumn_1=newTableColumn(table,SWT.NONE);
newColumnTableColumn_1.setWidth(85);
newColumnTableColumn_1.setText("姓名");
finalTableColumnnewColumnTableColumn_2=newTableColumn(table,SWT.NONE);
newColumnTableColumn_2.setWidth(41);
newColumnTableColumn_2.setText("性别");
finalTableColumnnewColumnTableColumn_3=newTableColumn(table,SWT.NONE);
newColumnTableColumn_3.setWidth(43);
newColumnTableColumn_3.setText("年龄");
finalTableColumnnewColumnTableColumn_4=newTableColumn(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()
importjava.util.ArrayList;
importjava.util.Date;
importjava.util.List;
publicclassPeople{
privateLongid;
privateStringname;
privateStringsex;
privateIntegerage;
privateDatecreateDate;
publicPeople(Longid,Stringname,Stringsex,Integerage,DatecreateDate){
this.id=id;
this.name=name;
this.sex=sex;
this.age=age;
this.createDate=createDate;
}
publicIntegergetAge(){
returnage;
}
publicvoidsetAge(Integerage){
this.age=age;
}
publicDategetCreateDate(){
returncreateDate;
}
publicvoidsetCreateDate(DatecreateDate){
this.createDate=createDate;
}
publicLonggetId(){
returnid;
}
publicvoidsetId(Longid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetSex(){
returnsex;
}
publicvoidsetSex(Stringsex){
this.sex=sex;
}
publicstaticListgetPeople(){
Listlist=newArrayList();
intn=30;
for(inti=1;i<n;i++){
Longid=newLong(i);
Stringname="张"+i;
Stringsex="男";
if((i%2)==0){
sex="女";
}
Integerage;
if(i<10){
age=newInteger(i*10);
}elseif(i>10&&i<100){
age=newInteger(i);
}elseif(i>100&&i<1000){
age=newInteger(i/10);
}else{
age=newInteger(22);
}
DatecreateDate=newDate();
Peoplepeople=newPeople(id,name,sex,age,createDate);
list.add(people);
}
returnlist;
}
}
(2)给tableViewer提供内容器(IStructuredContentPorvider)和标签器(ITableLabelProvider)
如果想一个tableviewer显示数据,那必须给它提供内容器和标签器,内容器的作用是从List(也可以是其他的集合类)中提取出一个对象(例如People对应着表格的一行,数据库的一条记录),标签器的作用是从一个对象中提取出一个字段(例如年龄,对应着表格中的一个单元格,数据库中某一列的一个值)下边是内容器和标签器的代码:
内容器:
importjava.util.List;
importorg.eclipse.jface.viewers.IStructuredContentProvider;
importorg.eclipse.jface.viewers.Viewer;
publicclassContentProviderimplementsIStructuredContentProvider{
publicObject[]getElements(ObjectinputElement){
if(inputElementinstanceofList){
return((List)inputElement).toArray();
}else{
returnnewObject[0];
}
}
publicvoiddispose(){
}
publicvoidinputChanged(Viewerviewer,ObjectoldInput,ObjectnewInput){
}
}
标签器:
importjava.text.SimpleDateFormat;
importorg.eclipse.jface.viewers.ITableLabelProvider;
importorg.eclipse.jface.viewers.LabelProvider;
importorg.eclipse.swt.graphics.Image;
publicclassTableLabelProviderextendsLabelProviderimplementsITableLabelProvider{
publicStringgetColumnText(Objectelement,intcolumnIndex){
if(elementinstanceofPeople){
Peoplep=(People)element;
if(columnIndex==0){
returnp.getId().toString();
}elseif(columnIndex==1){
returnp.getName();
}elseif(columnIndex==2){
returnp.getSex();
}elseif(columnIndex==3){
returnp.getAge().toString();
}elseif(columnIndex==4){
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd");
returnsdf.format(p.getCreateDate());
}
}
returnnull;
}
publicImagegetColumnImage(Objectelement,intcolumnIndex){
returnnull;
}
}
注意这里:extends LabelProvider,为什么要加这个呢? 因为如果不加这个,因为实现ITableLabelProvider的缘故我们还要写四个空函数,而我们本身不需要在这四个空函数中实现什么,所以让它继承自LabelProvider,就可以避免四个空函数。
(3)把标签器和内容器给tableviewer
在shell.open()前边加上这几行
//设置内容器
tableViewer.setContentProvider(newContentProvider());
//设置标签器
tableViewer.setLabelProvider(newTableLabelProvider());
//把数据集合给tableView
tableViewer.setInput(People.getPeople());
//这样利用内容器和标签器就能从setInput得到的数据集合分解出显示表格需要的数据。这是一个典型的mvc的实现.
4,样式改变
如果想在每一列前加入一个checkbox
只需要在开始的式样中加入SWT.CHECK
好了到此一个简单的样子选择出来了,但这仅仅是开始,下边将继续介绍按列排序、过滤器、行的颜色设置、在表格上直接编辑等功能
附上source:http://www.blogjava.net/Files/dreamstone/jface-1.rar
分享到:
相关推荐
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 核心应用光盘源码下载,解压后即可使用
NULL 博文链接:https://arizona.iteye.com/blog/526298
Eclipse SWT/JFace 核心应用 带书签 Eclipse SWT/JFace
Eclipse SWT/JFace核心应用
本文档为swt/jface的api中文帮助文档。
SWT/JFace开发实例
eclipse swt/jface核心应用源代码 带视频,找了好久,希望可以帮到大家,跟书匹配
eclipse swt/jface核心应用 这本书的源代码
Eclipse从入门到精通中的SWT/JFace章节!
NULL 博文链接:https://niub.iteye.com/blog/1806580
中国Eclipse社区的SWT/JFace开发入门指南,很经典的,网页上还有原作者的博客上的图片不能显示了,通过整理找到了图片,并做成了PDF的。
SWT 是由 IBM 领 导的开源项目 Eclipse 的一个子项目,但 SWT 应用上也存在不足,SWT 库反映的是本地操作 系统的基本窗口小部件,在许多环境下,这种方法较低级。JFace 库作为 SWT 的增强库很好 地弥补了它的缺点,...