RCP开发浅谈之SWT,JFACE

来源:互联网 发布:网络被劫持怎么办 编辑:程序博客网 时间:2024/05/22 10:54

RCP开发浅谈之SWT,JFACE

  • SWT
    什么是SWT?
    SWT全名是Standard Widget Toolkit是一个开源的GUI编程框架,我们每一个java开发者,在学习java开发的时候都会接触到awt以及swing这两个图形库,与awt,swing两个图形库不同,swt的优势体现于底层调用本地的图形库,大大提高了运行速度(损失了一定跨平台性)。SWT的一个很重要的一点,一个控件并不是单独存在的,而是存在于父控件中。这样当父控件disposed后,子控件也一定很disposed了。每一个swt控件的构造函数,都要依托于一个parent容器。
Table table = new Table(parent,SWT.MULTI|SWT.H_SCROLL);
  • JFACE
    既然有了SWT,为什么会有JFACE的诞生呢?当然是为了弥不了对视图层,控制层,数据层的隔离,进行了MVC的封装。比如数据来源就是Model.通过
tableViewer.setInput(objs);

数据如何组织(Controller)

tableViewer.setContentProvider(new ArrayContentProvider)

数据如何显示(Viewer)

tableViewer.setLabelProvider(..);

table展示数据依赖于索引,jface封装了很多方法,你只需传入一些对象就可玩成对数据的过滤,排序,组织等功能。

下面是一个具体table和tableviewer的demo:
依赖于5个包:

import java.util.List;import org.eclipse.jface.viewers.ArrayContentProvider;import org.eclipse.jface.viewers.ColumnLabelProvider;import org.eclipse.jface.viewers.TableViewer;import org.eclipse.jface.viewers.TableViewerColumn;import org.eclipse.swt.SWT;import org.eclipse.swt.layout.GridData;import org.eclipse.swt.layout.GridLayout;import org.eclipse.swt.widgets.Display;import org.eclipse.swt.widgets.Shell;import org.eclipse.swt.widgets.Table;import org.eclipse.swt.widgets.TableColumn;import org.eclipse.swt.widgets.TableItem;import com.google.common.collect.Lists;class People {    String name;    String age;    int index;    public People(int index, String name, String age) {        this.name = name;        this.age = age;        this.index = index;    }    public String getName() {        return name;    }    public String getAge() {        return age;    }    public int getIndex() {        return index;    }}public class Demo {    public static void main(String[] args) {        Display display = Display.getDefault();        Shell shell = new Shell(display);        shell.setMaximized(true);        shell.setLayout(new GridLayout(2, false));        Table table = new Table(shell, SWT.MULTI | SWT.FULL_SELECTION                | SWT.CHECK);        table.setToolTipText("SWT table demo");        table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true));        table.setHeaderVisible(true);        table.setLinesVisible(true);        createColumLabel(table);        List<People> objs = createData();        for (int row = 0; row < objs.size(); row++) {            TableItem item = new TableItem(table, SWT.FILL);            // 依赖于具体参数            for (int col = 0; col < table.getColumnCount(); col++) {                if (objs.get(row) != null) {                    switch (col) {                    case 0:                        item.setText(col, objs.get(row).getIndex() + "");                        break;                    case 1:                        item.setText(col, objs.get(row).getName());                        break;                    case 2:                        item.setText(col, objs.get(row).getAge());                    }                }            }        }        table.pack();        TableViewer tableViewer = new TableViewer(shell, SWT.CHECK                | SWT.FULL_SELECTION);        createColumLabel(tableViewer);        tableViewer.setContentProvider(new ArrayContentProvider());        tableViewer.setInput(objs);        shell.open();        while (!shell.isDisposed()) {            if (!display.readAndDispatch()) {                continue;            }        }    }    private static void createColumLabel(Table table) {        for (int i = 0; i < 3; i++) {            TableColumn tc = new TableColumn(table, SWT.CENTER);            tc.setResizable(false);            tc.setWidth(250);        }    }    private static List<People> createData() {        List<People> peoples = Lists.newArrayList();        peoples.add(new People(1, "Li hua", "20"));        peoples.add(new People(2, "Wang qiang", "30"));        peoples.add(new People(3, "Zhang wei", "40"));        return peoples;    }    private static void createColumLabel(TableViewer tableViewer) {        TableViewerColumn viewerColum1 = new TableViewerColumn(tableViewer,                SWT.NONE);        viewerColum1.setLabelProvider(new ColumnLabelProvider() {            @Override            public String getText(Object element) {                if (element instanceof People) {                    return People.class.cast(element).getIndex() + "";                }                return super.getText(element);            }        });        TableViewerColumn viewerColum2 = new TableViewerColumn(tableViewer,                SWT.NONE);        viewerColum2.setLabelProvider(new ColumnLabelProvider() {            @Override            public String getText(Object element) {                if (element instanceof People) {                    return People.class.cast(element).getName();                }                return super.getText(element);            }        });        TableViewerColumn viewerColum3 = new TableViewerColumn(tableViewer,                SWT.NONE);        viewerColum3.setLabelProvider(new ColumnLabelProvider() {            @Override            public String getText(Object element) {                if (element instanceof People) {                    return People.class.cast(element).getAge();                }                return super.getText(element);            }        });        TableColumn tableColumn = viewerColum1.getColumn();        tableColumn.setResizable(false);        tableColumn.setWidth(250);        tableColumn = viewerColum2.getColumn();        tableColumn.setResizable(false);        tableColumn.setWidth(250);        tableColumn = viewerColum3.getColumn();        tableColumn.setResizable(false);        tableColumn.setWidth(250);    }}

第一篇RCP就写到这里。。

0 0