swt/jface tableviewer入门教程一(显示tableviewer) -凯发k8网页登录

开发出高质量的系统

常用链接

统计

积分与排名

好友之家

最新评论

swt/jface tableviewer入门教程一(显示tableviewer)

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(
500375);
        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(
9779373154);

        
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:

posted on 2007-08-05 12:48 dreamstone 阅读(20146) 评论(8)     所属分类: swt和插件开发

# re: swt/jface tableviewer入门教程一(显示tableviewer)[未登录] 2007-08-16 08:08

要是有图就更完美了~~  回复     

# re: swt/jface tableviewer入门教程一(显示tableviewer) 2007-08-17 12:34 dreamstone

blog上贴图比较麻烦。不过我提供了source,直接下载,用eclipse打开,运行,图就有了。  回复     

# re: swt/jface tableviewer入门教程一(显示tableviewer) 2007-11-12 10:28

非常不错  回复     

# re: swt/jface tableviewer入门教程一(显示tableviewer) 2008-04-29 16:38

ibm上面有比较详细的

但是没你说的通俗...

受教了...  回复     

# re: swt/jface tableviewer入门教程一(显示tableviewer) 2009-12-31 17:10

"因为如果不加这个,因为实现 itablelabelprovider 的缘故我们还要写四个空函数,而我们本身不需要在这四个空函数中实现什么,所以让它继承自labelprovider,就可以避免四个空函数。"
呵呵 这样写不好 并不能为了避免四个空函数 而去继承  回复     

# re: swt/jface tableviewer入门教程一(显示tableviewer) 2012-05-02 11:02

谢谢!  回复     

# re: swt/jface tableviewer入门教程一(显示tableviewer)[未登录] 2013-07-11 09:31

感谢楼主  回复     

# re: swt/jface tableviewer入门教程一(显示tableviewer) 2015-01-22 10:49

楼主讲解的很清楚,学习了。
  回复     


只有注册用户后才能发表评论。


网站导航:
              
 
网站地图