http://blog.163.com/bluefield_wild/blog/static/8182709520085612235336/

package list;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ColumnPixelData;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
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 TableViewerDemo{
    // 作为公共变量以便在事件中访问
    TableViewer tableViewer = null;

public TableViewerDemo() {
        Display display = Display.getDefault();
        Shell shell = new Shell(display);
        shell.setLayout(new GridLayout());
        shell.setText("TableViewerDemo");

// 按钮面板
        final Composite compControl = new Composite(shell, SWT.NONE);
        compControl.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, false));
        final RowLayout rowLayout = new RowLayout();
        rowLayout.justify = true;
        compControl.setLayout(rowLayout);

// 按钮监听器
        ButtonSelectionListener buttonSelectionListener = new ButtonSelectionListener();
        
        final Button btnCreate = new Button(compControl, SWT.NONE);
        btnCreate.setText("读取");
        btnCreate.addSelectionListener(buttonSelectionListener);

final Button btnUpdate = new Button(compControl, SWT.NONE);
        btnUpdate.setText("修改");
        btnUpdate.addSelectionListener(buttonSelectionListener);

final Button btnInsert = new Button(compControl, SWT.NONE);
        btnInsert.setText("增加");
        btnInsert.addSelectionListener(buttonSelectionListener);

final Button btnDelete = new Button(compControl, SWT.NONE);
        btnDelete.setText("删除");
        btnDelete.addSelectionListener(buttonSelectionListener);

// 表格面板
        Composite compTableViewer = new Composite(shell, SWT.NONE);
        compTableViewer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        compTableViewer.setLayout(new FillLayout());

// 调用自定义方法生成表格
        tableViewer = createTableViewer(compTableViewer);

shell.setSize(600, 400);
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
        display.dispose();
    }

/** *//**
     * 按钮监听器
     */
    private class ButtonSelectionListener extends SelectionAdapter {

public void widgetSelected(SelectionEvent event) {
            String buttonText = null;

// 取得按钮上的文字
            if (event.getSource() instanceof Button) {
                buttonText = ((Button) event.getSource()).getText();
            } else {
                return;
            }

// 取得用户所选择的第一行, 若没有选择则为null
            IStructuredSelection selection = (IStructuredSelection) tableViewer
                    .getSelection();
            PeopleEntity people =  (PeopleEntity) selection.getFirstElement();
            boolean isSelected = (people != null);

// 根据按钮上的文字来区分不同的按钮, 并产生相应的事件
            if (buttonText.equals("读取")) {
                if (isSelected) {
                    String strInfo = "ID: " + people.getId() + " Name: "
                            + people.getName();
                    MessageDialog.openInformation(null, "您所选择的内容:", strInfo);
                } else {
                    MessageDialog.openInformation(null, "您所选择的内容:", "未选择行!");                    
                }
                
            } else if (buttonText.equals("修改")) {
                if (isSelected) {
                    int id = people.getId();
                    people.setId(id+1);                    
                } else {
                    MessageDialog.openInformation(null, "您所选择的内容:", "未选择行!");                    
                }

} else if (buttonText.equals("增加")) {
                people = new PeopleEntity(0, "临时用户");
                ((List)tableViewer.getInput()).add(people);

} else if (buttonText.equals("删除")) {
                if (isSelected) {
                    // 先预先移动到下一行
                    Table table = tableViewer.getTable();
                    int i = table.getSelectionIndex(); // 取得当前所选行的序号,如没有则返回-1
                    table.setSelection(i + 1); // 当前选择行移下一行
                    ((List)tableViewer.getInput()).remove(people);        
                } else {
                    MessageDialog.openInformation(null, "您所选择的内容:", "未选择行!");                    
                }

}
            // 刷新表格, 否则没有反应
            tableViewer.refresh();
        }

}

/** *//**
     * 生成TableViewer对象
     */
    private TableViewer createTableViewer(Composite compTableViewer) {
        // 第一步: 定义一个TableViewer对象, 并设置相应式样
        TableViewer tableViewer = new TableViewer(compTableViewer, SWT.BORDER
                | SWT.MULTI | SWT.FULL_SELECTION);

// 第二步: 通过TableViewer中的Table对其布局
        Table table = tableViewer.getTable();
        table.setHeaderVisible(true);
        table.setLinesVisible(true);
        TableLayout tableLayout = new TableLayout();
        table.setLayout(tableLayout);

// 第三步: 建立TableViewer中的列
        tableLayout.addColumnData(new ColumnPixelData(80));
        new TableColumn(table, SWT.NONE).setText("ID");
        tableLayout.addColumnData(new ColumnPixelData(80));
        new TableColumn(table, SWT.NONE).setText("Name");

// 第四步: 设置内容器
        tableViewer.setContentProvider(new TableViewerContentProvider());

// 第五步: 设置标签器
        tableViewer.setLabelProvider(new TableViewerLabelProvider());

// 第六步: 用数据充实表格
        List<PeopleEntity> list = new ArrayList<PeopleEntity>();
        list.add(new PeopleEntity(1, "小张"));
        list.add(new PeopleEntity(2, "小王"));
        tableViewer.setInput(list);

// 返回
        return tableViewer;
    }

/** *//**
     * 生成表格的内容器
     */
    private class TableViewerContentProvider implements
            IStructuredContentProvider {

/** *//**
         * 此方法接收输入到表格的数据集合,然后转化成数组返回,重修数组元素就是一个实体类对象,也即一条记录.
         * 参数element就是通过setInput(getPeoples())输入的对象,
         * 因为getPeoples()返回的是一个List,所以参数elements的类型也是List
         */
        public Object[] getElements(Object element) {
            if (element instanceof List) {
                return ((List) element).toArray();
            } else {
                return new Object[0];
            }
        }

public void dispose() {
        }

public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
        }

}

/** *//**
     * 生成表格的标签器
     */
    private class TableViewerLabelProvider implements ITableLabelProvider {
        /** *//**
         * 由此方法决定数据记录在表格的第一列是显示什么文字
         */
        public String getColumnText(Object element, int column) {
            PeopleEntity people = (PeopleEntity) element;
            if (column == 0) {
                return String.valueOf(people.getId());
            } else if (column == 1) {
                return people.getName();
            }
            return "";
        }

public void addListener(ILabelProviderListener arg0){
        }

public void dispose() {
        }

public boolean isLabelProperty(Object arg0, String arg1) {
            return false;
        }

public void removeListener(ILabelProviderListener arg0) {
        }

public Image getColumnImage(Object arg0, int arg1) {
            return null;
        }

}

// 实体类, 这里仅举一个简单的例子, 读者可以根据实际充实
    private class PeopleEntity {
        private int id = 0;

private String name = null;

private PeopleEntity(){
        }

public PeopleEntity(int id, String name) {
            this.id = id;
            this.name = name;
        }

public void setId(int id) {
            this.id = id;
        }

public int getId() {
            return id;
        }

public void setName(String name) {
            this.name = name;
        }

public String getName() {
            return name;
        }

}
    /** *//**
     * @param args
     */
    public static void main(String[] args) {
        new TableViewerDemo();
    }

}

swt TableViewer的更多相关文章

  1. 关于SWT中的表格(TableViewer类)

    JFace是SWT的扩展.它提供了一组功能强大的界面组件.其中包含表格,树,列表.对话框,向导对话框等. 表格是一种在软件系统中很常用的数据表现形式.特别是基于数据库的应用系统.表格更是不可缺少的界面 ...

  2. SWT的TreeViewer和TableViewer的交互

    左边是一个TreeViewer,右边是一个TableViewer.当点击左边的treeitem的时候,右边的tableViewer要将该item的子节点信息显示出来.就像这样: 左边的treeView ...

  3. swt,jface,rcp

    //swt-jface-rcp,基本结构:display类,shell类,组件:widget窗口控件,control控件,composites面板,button,label,text文本框,list列 ...

  4. SWT的ListVierer的使用

    package com.test; import java.util.ArrayList; import java.util.List; import model.People; import org ...

  5. SWT的TableVierer的使用三(数据筛选和着色)

    如果我们想根据某一列来过滤记录,如何实现呢?很简单,定义一个过滤器filter.这里只演示定义一个过滤器的情况.现实中你可以定义多个灵活的过滤器,通过替换过滤器来实现各种各样的过滤.一.过滤器代码: ...

  6. SWT的TableVierer的使用二(数据排序)

    有一个功能是我们常使用的,就是在列的头上点击一下,整个表的记录按照这个列来排序,再点击一下按照这个列的反序来排序.那JFace是如何实现这个功能的呢?在JFace中是通过一个排序器来实现的,就是Vie ...

  7. SWT的TableVierer的使用一

    1,简单显示,表格的式样见注释中的内容 import org.eclipse.jface.viewers.TableViewer;import org.eclipse.swt.SWT;import o ...

  8. SWT入门-常用组件的使用(转)

    转自:http://www.cnblogs.com/kentyshang/archive/2007/08/16/858367.html swt的常用组件button ,text ,combo,list ...

  9. JFace TableViewer性能改善 -- 使用VirtualTable

    前一篇提到了SWT中的table的通过使用virtual table性能得到很大的改善,那么如果既存的工程中使用的是TableViewer来创建的表,也能改成virtual table吗? 答案是肯定 ...

随机推荐

  1. 【Java】函数使用

    package aaa; public class aaa { public static int add(int a,int b) { return a+b; } public static voi ...

  2. ubuntu 下mysql导入出.sql文件

    1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql 2.导 ...

  3. Oracle 查询状态 自检

    Tips:fnd_lobs表会保存我们上传的一些文件和Form界面“文件“-“导出”的文件.如果不定期清理了话,会出现文件上传失败,或者是导出按钮可以点击,但是点击完以后没有任何反应.这个时候我们应该 ...

  4. [EXCEL] 不能清除剪贴板: We couldn't free up space on the clipboard. Another program might be using it right now

    Excel复制粘贴时出现以下错误,原因是有程序占用了剪切板. We couldn't free up space on the clipboard. Another program might be ...

  5. unbind() 移除事件内处理方法

    实例: 移除所有 p 元素的事件处理器: $("button").click(function(){ $("p").unbind(); }); 定义和用法: u ...

  6. elastic search报错——“failed to obtain node locks”

    启动时报错信息: 这里写图片描述 寻找主要信息:failed to obtain node locks这里写图片描述简单理解为:绑定节点失败!!! 百度后,好多人同样遇到了这个问题,导致的原因可能是因 ...

  7. Linux系统清除多余的账号

    清除多余的账号 注释掉/etc/passwd文件中nologin的行 grep 'nologin' /etc/passwd 注: 目前暂没想到用命令行替换,后面再想想

  8. EntityFramework Code First便捷工具——数据迁移

    使用EntityFramework Code First开发,数据迁移是一个不得不提的技术. 在我们的开发过程中,难免需要对模型进行改进,模型改进后,会导致实体集与数据库不一致,当然我们可以通过删除数 ...

  9. November 14th 2016 Week 47th Monday

    There are far, far better things ahead than any we leave behind. 前方,有更美好的未来. Can I see those better ...

  10. #002 Emmet完整API

    介绍 这里包含了,所有的Emmet API,非常的详细,但是有一点详细过头了,如果只想快速上手,那么推荐<#001 Emmet的API图片> Emmet (前身为 Zen Coding) ...