SWT的TableVierer的使用一
1,简单显示,表格的式样见注释中的内容
 import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT;
import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableColumn;
 public class TestTableViewer {
public class TestTableViewer { private static Table table;
    private static Table table; /**
    /** * Launch the application
     * Launch the application * @param args
     * @param args */
     */ public static void main(String[] args) {
    public static void main(String[] args) { final Display display = Display.getDefault();
        final Display display = Display.getDefault(); final Shell shell = new Shell();
        final Shell shell = new Shell(); shell.setSize(500, 375);
        shell.setSize(500, 375); shell.setText("SWT Application");
        shell.setText("SWT Application"); //注意这里,SWT.NULTI代表可以选择多行,SWT.FULL_SELECTION代表可以整行选择,SWT.BORDER边框,SWT.V_SCROLL ,SWT.H_SCROLL滚动条
        //注意这里,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);
        final TableViewer tableViewer = new TableViewer(shell, SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER|SWT.V_SCROLL|SWT.H_SCROLL); 
         table = tableViewer.getTable();
        table = tableViewer.getTable(); table.setLinesVisible(true);     //注意,若没有这句则没有分割的横竖线线。
        table.setLinesVisible(true);     //注意,若没有这句则没有分割的横竖线线。 table.setHeaderVisible(true);  //若没有这句,则没有分割的名字。
        table.setHeaderVisible(true);  //若没有这句,则没有分割的名字。 table.setBounds(97, 79, 373, 154);
        table.setBounds(97, 79, 373, 154);
 final TableColumn newColumnTableColumn = new TableColumn(table, SWT.NONE);
        final TableColumn newColumnTableColumn = new TableColumn(table, SWT.NONE); newColumnTableColumn.setWidth(39);
        newColumnTableColumn.setWidth(39); newColumnTableColumn.setText("ID");
        newColumnTableColumn.setText("ID");
 final TableColumn newColumnTableColumn_1 = new TableColumn(table, SWT.NONE);
        final TableColumn newColumnTableColumn_1 = new TableColumn(table, SWT.NONE); newColumnTableColumn_1.setWidth(85);
        newColumnTableColumn_1.setWidth(85); newColumnTableColumn_1.setText("姓名");
        newColumnTableColumn_1.setText("姓名"); 
         final TableColumn newColumnTableColumn_2 = new TableColumn(table, SWT.NONE);
        final TableColumn newColumnTableColumn_2 = new TableColumn(table, SWT.NONE); newColumnTableColumn_2.setWidth(41);
        newColumnTableColumn_2.setWidth(41); newColumnTableColumn_2.setText("性别");
        newColumnTableColumn_2.setText("性别");
 final TableColumn newColumnTableColumn_3 = new TableColumn(table, SWT.NONE);
        final TableColumn newColumnTableColumn_3 = new TableColumn(table, SWT.NONE); newColumnTableColumn_3.setWidth(43);
        newColumnTableColumn_3.setWidth(43); newColumnTableColumn_3.setText("年龄");
        newColumnTableColumn_3.setText("年龄");
 final TableColumn newColumnTableColumn_4 = new TableColumn(table, SWT.NONE);
        final TableColumn newColumnTableColumn_4 = new TableColumn(table, SWT.NONE); newColumnTableColumn_4.setWidth(126);
        newColumnTableColumn_4.setWidth(126); newColumnTableColumn_4.setText("创建日期");
        newColumnTableColumn_4.setText("创建日期"); 
         shell.open();
        shell.open(); while (!shell.isDisposed()) {
        while (!shell.isDisposed()) { if (!display.readAndDispatch())
            if (!display.readAndDispatch()) display.sleep();
                display.sleep(); }
        } }
    } }
}2,加入布局
显示的效果不好,我们要加入布局,让view填充整个画面在shell.open()后加上
ok,效果达到
3,为TableViewer加上数据,光突突的样子不好看。这里是demo所以不再从数据库里边取数据了。自己构造一个List用来做数据。实际使用中也是这么使用,不过不同的是这里是随意构造的list,而显示实际使用中是从数据库取出数据构造list.
(1)构造一个people类,同时给People类提供一个构造假数据的方法getPeople()
 import java.util.ArrayList;
import java.util.ArrayList; import java.util.Date;
import java.util.Date; import java.util.List;
import java.util.List; public class People{
public class People{ private Long id;
    private Long id; private String name;
    private String name; private String sex;
    private String sex; private Integer age;
    private Integer age; private Date createDate;
    private Date createDate; public People(Long id,String name,String sex,Integer age,Date createDate){
    public People(Long id,String name,String sex,Integer age,Date createDate){ this.id = id;
        this.id = id; this.name = name;
        this.name = name; this.sex = sex;
        this.sex = sex; this.age = age;
        this.age = age; this.createDate = createDate;
        this.createDate = createDate; }
    } public Integer getAge() {
    public Integer getAge() { return age;
        return age; }
    } public void setAge(Integer age) {
    public void setAge(Integer age) { this.age = age;
        this.age = age; }
    } public Date getCreateDate() {
    public Date getCreateDate() { return createDate;
        return createDate; }
    } public void setCreateDate(Date createDate) {
    public void setCreateDate(Date createDate) { this.createDate = createDate;
        this.createDate = createDate; }
    } public Long getId() {
    public Long getId() { return id;
        return id; }
    } public void setId(Long id) {
    public void setId(Long id) { this.id = id;
        this.id = id; }
    } public String getName() {
    public String getName() { return name;
        return name; }
    } public void setName(String name) {
    public void setName(String name) { this.name = name;
        this.name = name; }
    } public String getSex() {
    public String getSex() { return sex;
        return sex; }
    } public void setSex(String sex) {
    public void setSex(String sex) { this.sex = sex;
        this.sex = sex; }
    } public static List getPeople(){
    public static List getPeople(){ List list = new ArrayList();
        List list = new ArrayList(); int n = 30;
        int n = 30; for(int i=1;i<n;i++){
        for(int i=1;i<n;i++){ Long id = new Long(i);
            Long id = new Long(i); String name = "张"+i;
            String name = "张"+i; String sex = "男";
            String sex = "男"; if((i%2) == 0){
            if((i%2) == 0){ sex = "女";
                sex = "女"; }
            } Integer age;
            Integer age; if(i<10){
            if(i<10){ age = new Integer(i*10);
                age = new Integer(i*10); }else if(i>10 && i<100){
            }else if(i>10 && i<100){ age = new Integer(i);
                age = new Integer(i); }else if(i>100 && i<1000){
            }else if(i>100 && i<1000){ age = new Integer(i/10);
                age = new Integer(i/10); }else{
            }else{ age = new Integer(22);
                age = new Integer(22); }
            } Date createDate = new Date();
            Date createDate = new Date(); People people = new People(id,name,sex,age,createDate);
            People people = new People(id,name,sex,age,createDate); list.add(people);
            list.add(people); }
        } return list;
        return list; }
    } }
}(2)给tableViewer提供内容器(IStructuredContentPorvider)和标签器(ITableLabelProvider)
如果想一个tableviewer显示数据,那必须给它提供内容器和标签器,内容器的作用是从List(也可以是其他的集合类)中提取出一个对象(例如People对应着表格的一行,数据库的一条记录),标签器的作用是从一个对象中提取出一个字段(例如年龄,对应着表格中的一个单元格,数据库中某一列的一个值)下边是内容器和标签器的代码:
内容器:
 import java.util.List;
import java.util.List;
 import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.Viewer;
 public class ContentProvider implements IStructuredContentProvider {
public class ContentProvider implements IStructuredContentProvider { public Object[] getElements(Object inputElement) {
        public Object[] getElements(Object inputElement) { if(inputElement instanceof List){
            if(inputElement instanceof List){ return ((List)inputElement).toArray();
                return ((List)inputElement).toArray(); }else{
            }else{ return new Object[0];
                return new Object[0]; }
            } }
        } public void dispose() {
        public void dispose() { }
        } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { }
        } }
    }标签器:
 import java.text.SimpleDateFormat;
import java.text.SimpleDateFormat;
 import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Image;
 public class TableLabelProvider extends LabelProvider implements ITableLabelProvider {
public class TableLabelProvider extends LabelProvider implements ITableLabelProvider { public String getColumnText(Object element, int columnIndex) {
        public String getColumnText(Object element, int columnIndex) { if (element instanceof People){
            if (element instanceof People){ People p = (People)element;
                People p = (People)element; if(columnIndex == 0){
                if(columnIndex == 0){ return p.getId().toString();
                    return p.getId().toString(); }else if(columnIndex == 1){
                }else if(columnIndex == 1){ return p.getName();
                    return p.getName(); }else if (columnIndex ==2){
                }else if (columnIndex ==2){ return p.getSex();
                    return p.getSex(); }else if (columnIndex == 3){
                }else if (columnIndex == 3){ return p.getAge().toString();
                    return p.getAge().toString(); }else if (columnIndex == 4){
                }else if (columnIndex == 4){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return sdf.format(p.getCreateDate());
                    return sdf.format(p.getCreateDate()); }
                } }
            } return null;
            return null; }
        } public Image getColumnImage(Object element, int columnIndex) {
        public Image getColumnImage(Object element, int columnIndex) { return null;
            return null; }
        } }
    }注意这里:extends LabelProvider,为什么要加这个呢? 因为如果不加这个,因为实现 ITableLabelProvider 的缘故我们还要写四个空函数,而我们本身不需要在这四个空函数中实现什么,所以让它继承自LabelProvider,就可以避免四个空函数。
(3)把标签器和内容器给tableviewer
在shell.open()前边加上这几行
 //设置内容器
//设置内容器 tableViewer.setContentProvider(new ContentProvider());
tableViewer.setContentProvider(new ContentProvider()); //设置标签器
//设置标签器 tableViewer.setLabelProvider(new TableLabelProvider());
tableViewer.setLabelProvider(new TableLabelProvider()); //把数据集合给tableView
//把数据集合给tableView tableViewer.setInput(People.getPeople());
tableViewer.setInput(People.getPeople()); //这样利用内容器和标签器就能从setInput得到的数据集合分解出显示表格需要的数据。这是一个典型的mvc的实现.
//这样利用内容器和标签器就能从setInput得到的数据集合分解出显示表格需要的数据。这是一个典型的mvc的实现.4,样式改变
如果想在每一列前加入一个checkbox
只需要在开始的式样中加入SWT.CHECK
好了到此一个简单的样子选择出来了,但这仅仅是开始,下边将继续介绍按列排序、过滤器、行的颜色设置、在表格上直接编辑等功能
 附上source:http://www.blogjava.net/Files/dreamstone/jface-1.rar
效果图:

SWT的TableVierer的使用一的更多相关文章
- SWT的TableVierer的使用三(数据筛选和着色)
		如果我们想根据某一列来过滤记录,如何实现呢?很简单,定义一个过滤器filter.这里只演示定义一个过滤器的情况.现实中你可以定义多个灵活的过滤器,通过替换过滤器来实现各种各样的过滤.一.过滤器代码: ... 
- SWT的TableVierer的使用二(数据排序)
		有一个功能是我们常使用的,就是在列的头上点击一下,整个表的记录按照这个列来排序,再点击一下按照这个列的反序来排序.那JFace是如何实现这个功能的呢?在JFace中是通过一个排序器来实现的,就是Vie ... 
- eclipse里打开SWT项目找不到source/design的图形UI设计界面
		因为前天重新装了个新版的eclipse, 结果今天打开一个SWT的项目,突然找不到source/design的图形UI设计的两个切换按钮 我把SWT组件重新装了还是找不到.结果后来发现是因为重装ecl ... 
- eclipse Swt编程—窗口小部件widget
		1.标签Label // 标签(Label类)组件是SWT中最简单的组件.Label类的构造方法和格式如下: // Label(Composite parent, 
- Eclipse swt开发环境搭建
		原料: eclipse swt.下载链接为: Eclipse 4.6.2 Release Build: 4.6.2 配置说明: Developing SWT applications using Ec ... 
- 使SWT/JFace支持跨平台
		由于SWT的实现机制,在不同平台下,必须引用不同swt*.jar. 由于这个瓶颈,我们要为不同的平台编译不同的版本.但是这是可以避免的.这将是本文要讨论的内容. 我一共google到了3种soluti ... 
- 使Docker Container支持运行SWT程序
		1, 下载安装JDK的docker container 我是从这个源下载已经做好的JDK8的container: https://registry.hub.docker.com/u/dockerfil ... 
- org.eclipse.swt.custom.StyledText.getScrollbarsMode()I
		错误: org.eclipse.swt.custom.StyledText.getScrollbarsMode()I 解决方法: 1 卸载,并手工清除myeclipse全部文件 2 重新安装myecl ... 
- swt controls里的控件list
		swt controls里的控件list,怎么显示滚动条,并且滚动条自动移动到最下边时,显示最新内容 package com.jokul; import org.eclipse.swt.widgets ... 
随机推荐
- bonjour
			首先bonjour并非必须的,可是它的确非常方便,假设没有它我们须要指定ip地址进行局域网的传输,有了它就能够依据服务的详细的名称来选择服务,能够这样来理解bonjour就相当于hostname,我们 ... 
- 【Demo 0009】Java基础-异常
			本章学习要点: 1. 了解异常的基本概念: 2. 掌握异常捕获方法以及注意事项; 3. 掌握异常抛出方法: 4. 掌握自定义异常类和异常类继承注 ... 
- 一些关于linux 下的jni下问题
			编译的细节我就不写了,主要写一些linux下的注意事项,mask一下错误(太多windows的例子了) 编译教程:http://www.cnblogs.com/youxilua/archive/201 ... 
- DataGridView ——管理员对用户的那点操作
			记得第一次做机房收费系统的时候,就在加入删除用户这出现了点小问题,由于一直都是一个容不得一点瑕疵的人.所以对查询用户的时候查询一次就会多一些空行我非常是不能容忍.看似非常小的问题,我却花了非常长的时间 ... 
- Javascript实现简单的富文本编辑器
			<span style="font-size:14px;"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 T ... 
- [每日一题] 11gOCP 1z0-052 :2013-08-30 差异的增量备份.....................................................A1
			转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/10669381 正确答案:AD 执行增量备份操作时,首先需要的是增量基本备份(increme ... 
- RPC 的概念模型与实现解析(转)
			今天分布式应用.云计算.微服务大行其道,作为其技术基石之一的 RPC 你了解多少?一篇 RPC 的技术总结文章,数了下 5k+ 字,略长,可能也不适合休闲的碎片化时间阅读,可以先收藏抽空再细读:) 全 ... 
- 【Demo 0016】SQLite 数据库
			本章学习要点: 1. 熟悉SQL语句: 2. 掌握SQLit库的基本用法; 3. 掌握SQLite封装: 
- cocos2d-x 3.0 使用最新物理引擎的一个源代码实例
			1.碰撞函数參数由两个变成一个了 2.检測不到碰撞.须要设置那三个參数.同一时候还要设置成动态的. body进行设置. 3.初始入口文件也发生了改变. 附录上我近期调试好的cocos2d-x 3.1 ... 
- 虚幻4随笔4 从project開始
			 前文说到UE3開始.虚幻就使用了UnrealBuildTool(下面简称UBT)来编译和生成代码. 为什么这么做而不是使用VS是非常好理解的:由于VS跨平台会比較麻烦.像虚幻这样体量的proje ... 
