SWT的TableVierer的使用一

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

SWT的TableVierer的使用一import org.eclipse.jface.viewers.TableViewer;
SWT的TableVierer的使用一import org.eclipse.swt.SWT;
SWT的TableVierer的使用一import org.eclipse.swt.widgets.Display;
SWT的TableVierer的使用一import org.eclipse.swt.widgets.Shell;
SWT的TableVierer的使用一import org.eclipse.swt.widgets.Table;
SWT的TableVierer的使用一import org.eclipse.swt.widgets.TableColumn;
SWT的TableVierer的使用一
SWT的TableVierer的使用一public class TestTableViewer {
SWT的TableVierer的使用一    private static Table table;
SWT的TableVierer的使用一    /**
SWT的TableVierer的使用一     * Launch the application
SWT的TableVierer的使用一     * @param args
SWT的TableVierer的使用一     */
SWT的TableVierer的使用一    public static void main(String[] args) {
SWT的TableVierer的使用一        final Display display = Display.getDefault();
SWT的TableVierer的使用一        final Shell shell = new Shell();
SWT的TableVierer的使用一        shell.setSize(500, 375);
SWT的TableVierer的使用一        shell.setText("SWT Application");
SWT的TableVierer的使用一        //注意这里,SWT.NULTI代表可以选择多行,SWT.FULL_SELECTION代表可以整行选择,SWT.BORDER边框,SWT.V_SCROLL ,SWT.H_SCROLL滚动条
SWT的TableVierer的使用一        final TableViewer tableViewer = new TableViewer(shell, SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER|SWT.V_SCROLL|SWT.H_SCROLL);
SWT的TableVierer的使用一        
SWT的TableVierer的使用一        table = tableViewer.getTable();
SWT的TableVierer的使用一        table.setLinesVisible(true);     //注意,若没有这句则没有分割的横竖线线。
SWT的TableVierer的使用一        table.setHeaderVisible(true);  //若没有这句,则没有分割的名字。
SWT的TableVierer的使用一        table.setBounds(97, 79, 373, 154);
SWT的TableVierer的使用一
SWT的TableVierer的使用一        final TableColumn newColumnTableColumn = new TableColumn(table, SWT.NONE);
SWT的TableVierer的使用一        newColumnTableColumn.setWidth(39);
SWT的TableVierer的使用一        newColumnTableColumn.setText("ID");
SWT的TableVierer的使用一
SWT的TableVierer的使用一        final TableColumn newColumnTableColumn_1 = new TableColumn(table, SWT.NONE);
SWT的TableVierer的使用一        newColumnTableColumn_1.setWidth(85);
SWT的TableVierer的使用一        newColumnTableColumn_1.setText("姓名");
SWT的TableVierer的使用一        
SWT的TableVierer的使用一        final TableColumn newColumnTableColumn_2 = new TableColumn(table, SWT.NONE);
SWT的TableVierer的使用一        newColumnTableColumn_2.setWidth(41);
SWT的TableVierer的使用一        newColumnTableColumn_2.setText("性别");
SWT的TableVierer的使用一
SWT的TableVierer的使用一        final TableColumn newColumnTableColumn_3 = new TableColumn(table, SWT.NONE);
SWT的TableVierer的使用一        newColumnTableColumn_3.setWidth(43);
SWT的TableVierer的使用一        newColumnTableColumn_3.setText("年龄");
SWT的TableVierer的使用一
SWT的TableVierer的使用一        final TableColumn newColumnTableColumn_4 = new TableColumn(table, SWT.NONE);
SWT的TableVierer的使用一        newColumnTableColumn_4.setWidth(126);
SWT的TableVierer的使用一        newColumnTableColumn_4.setText("创建日期");
SWT的TableVierer的使用一        
SWT的TableVierer的使用一        shell.open();
SWT的TableVierer的使用一        while (!shell.isDisposed()) {
SWT的TableVierer的使用一            if (!display.readAndDispatch())
SWT的TableVierer的使用一                display.sleep();
SWT的TableVierer的使用一        }
SWT的TableVierer的使用一    }
SWT的TableVierer的使用一}

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

SWT的TableVierer的使用一import java.util.ArrayList;
SWT的TableVierer的使用一import java.util.Date;
SWT的TableVierer的使用一import java.util.List;
SWT的TableVierer的使用一public class People{
SWT的TableVierer的使用一    private Long id;
SWT的TableVierer的使用一    private String name;
SWT的TableVierer的使用一    private String sex;
SWT的TableVierer的使用一    private Integer age;
SWT的TableVierer的使用一    private Date createDate;
SWT的TableVierer的使用一    public People(Long id,String name,String sex,Integer age,Date createDate){
SWT的TableVierer的使用一        this.id = id;
SWT的TableVierer的使用一        this.name = name;
SWT的TableVierer的使用一        this.sex = sex;
SWT的TableVierer的使用一        this.age = age;
SWT的TableVierer的使用一        this.createDate = createDate;
SWT的TableVierer的使用一    }
SWT的TableVierer的使用一    public Integer getAge() {
SWT的TableVierer的使用一        return age;
SWT的TableVierer的使用一    }
SWT的TableVierer的使用一    public void setAge(Integer age) {
SWT的TableVierer的使用一        this.age = age;
SWT的TableVierer的使用一    }
SWT的TableVierer的使用一    public Date getCreateDate() {
SWT的TableVierer的使用一        return createDate;
SWT的TableVierer的使用一    }
SWT的TableVierer的使用一    public void setCreateDate(Date createDate) {
SWT的TableVierer的使用一        this.createDate = createDate;
SWT的TableVierer的使用一    }
SWT的TableVierer的使用一    public Long getId() {
SWT的TableVierer的使用一        return id;
SWT的TableVierer的使用一    }
SWT的TableVierer的使用一    public void setId(Long id) {
SWT的TableVierer的使用一        this.id = id;
SWT的TableVierer的使用一    }
SWT的TableVierer的使用一    public String getName() {
SWT的TableVierer的使用一        return name;
SWT的TableVierer的使用一    }
SWT的TableVierer的使用一    public void setName(String name) {
SWT的TableVierer的使用一        this.name = name;
SWT的TableVierer的使用一    }
SWT的TableVierer的使用一    public String getSex() {
SWT的TableVierer的使用一        return sex;
SWT的TableVierer的使用一    }
SWT的TableVierer的使用一    public void setSex(String sex) {
SWT的TableVierer的使用一        this.sex = sex;
SWT的TableVierer的使用一    }
SWT的TableVierer的使用一    public static List getPeople(){
SWT的TableVierer的使用一        List list = new ArrayList();
SWT的TableVierer的使用一        int n = 30;
SWT的TableVierer的使用一        for(int i=1;i<n;i++){
SWT的TableVierer的使用一            Long id = new Long(i);
SWT的TableVierer的使用一            String name = "张"+i;
SWT的TableVierer的使用一            String sex = "男";
SWT的TableVierer的使用一            if((i%2) == 0){
SWT的TableVierer的使用一                sex = "女";
SWT的TableVierer的使用一            }
SWT的TableVierer的使用一            Integer age;
SWT的TableVierer的使用一            if(i<10){
SWT的TableVierer的使用一                age = new Integer(i*10);
SWT的TableVierer的使用一            }else if(i>10 && i<100){
SWT的TableVierer的使用一                age = new Integer(i);
SWT的TableVierer的使用一            }else if(i>100 && i<1000){
SWT的TableVierer的使用一                age = new Integer(i/10);
SWT的TableVierer的使用一            }else{
SWT的TableVierer的使用一                age = new Integer(22);
SWT的TableVierer的使用一            }
SWT的TableVierer的使用一            Date createDate = new Date();
SWT的TableVierer的使用一            People people = new People(id,name,sex,age,createDate);
SWT的TableVierer的使用一            list.add(people);
SWT的TableVierer的使用一        }
SWT的TableVierer的使用一        return list;
SWT的TableVierer的使用一    }
SWT的TableVierer的使用一}

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

SWT的TableVierer的使用一import java.util.List;
SWT的TableVierer的使用一
SWT的TableVierer的使用一import org.eclipse.jface.viewers.IStructuredContentProvider;
SWT的TableVierer的使用一import org.eclipse.jface.viewers.Viewer;
SWT的TableVierer的使用一
SWT的TableVierer的使用一public class ContentProvider implements IStructuredContentProvider {
SWT的TableVierer的使用一        public Object[] getElements(Object inputElement) {
SWT的TableVierer的使用一            if(inputElement instanceof List){
SWT的TableVierer的使用一                return ((List)inputElement).toArray();
SWT的TableVierer的使用一            }else{
SWT的TableVierer的使用一                return new Object[0];
SWT的TableVierer的使用一            }
SWT的TableVierer的使用一        }
SWT的TableVierer的使用一        public void dispose() {
SWT的TableVierer的使用一        }
SWT的TableVierer的使用一        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
SWT的TableVierer的使用一        }
SWT的TableVierer的使用一    }

标签器:

SWT的TableVierer的使用一import java.text.SimpleDateFormat;
SWT的TableVierer的使用一
SWT的TableVierer的使用一import org.eclipse.jface.viewers.ITableLabelProvider;
SWT的TableVierer的使用一import org.eclipse.jface.viewers.LabelProvider;
SWT的TableVierer的使用一import org.eclipse.swt.graphics.Image;
SWT的TableVierer的使用一
SWT的TableVierer的使用一public class TableLabelProvider extends LabelProvider implements ITableLabelProvider {
SWT的TableVierer的使用一        public String getColumnText(Object element, int columnIndex) {
SWT的TableVierer的使用一            if (element instanceof People){
SWT的TableVierer的使用一                People p = (People)element;
SWT的TableVierer的使用一                if(columnIndex == 0){
SWT的TableVierer的使用一                    return p.getId().toString();
SWT的TableVierer的使用一                }else if(columnIndex == 1){
SWT的TableVierer的使用一                    return p.getName();
SWT的TableVierer的使用一                }else if (columnIndex ==2){
SWT的TableVierer的使用一                    return p.getSex();
SWT的TableVierer的使用一                }else if (columnIndex == 3){
SWT的TableVierer的使用一                    return p.getAge().toString();
SWT的TableVierer的使用一                }else if (columnIndex == 4){
SWT的TableVierer的使用一                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
SWT的TableVierer的使用一                    return sdf.format(p.getCreateDate());
SWT的TableVierer的使用一                }
SWT的TableVierer的使用一            }
SWT的TableVierer的使用一            return null;
SWT的TableVierer的使用一        }
SWT的TableVierer的使用一        public Image getColumnImage(Object element, int columnIndex) {
SWT的TableVierer的使用一            return null;
SWT的TableVierer的使用一        }
SWT的TableVierer的使用一    }

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

SWT的TableVierer的使用一//设置内容器
SWT的TableVierer的使用一tableViewer.setContentProvider(new ContentProvider());
SWT的TableVierer的使用一//设置标签器
SWT的TableVierer的使用一tableViewer.setLabelProvider(new TableLabelProvider());
SWT的TableVierer的使用一//把数据集合给tableView
SWT的TableVierer的使用一tableViewer.setInput(People.getPeople());
SWT的TableVierer的使用一//这样利用内容器和标签器就能从setInput得到的数据集合分解出显示表格需要的数据。这是一个典型的mvc的实现.

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

好了到此一个简单的样子选择出来了,但这仅仅是开始,下边将继续介绍按列排序、过滤器、行的颜色设置、在表格上直接编辑等功能
 附上source:http://www.blogjava.net/Files/dreamstone/jface-1.rar

效果图:

SWT的TableVierer的使用一

上一篇:asp.net中后台javaScrip的使用


下一篇:kubernetes云平台管理实战:deployment通过标签管理pod(十)