RCP 中的 SWT & JFACE

SWT

什么是SWT?

SWT全名是Standard Widget Toolkit是一个开源的GUI编程框架,我们每一个java开发者,在学习java开发的时候都会接触到awt以及swing这两个图形库,与awt,swing两个图形库不同,swt的优势体现于底层调用本地的图形库,大大提高了运行速度(损失了一定跨平台性)。SWT的一个很重要的一点,一个控件并不是单独存在的,而是存在于父控件中。这样当父控件disposed后,子控件也一定很disposed了。每一个swt控件的构造函数,都要依托于一个parent容器。

Tabletable = newTable(parent,SWT.MULTI|SWT.H_SCROLL);


JFACE

既然有了SWT,为什么会有JFACE的诞生呢?当然是为了弥不了对视图层,控制层,数据层的隔离,进行了MVC的封装。比如数据来源就是Model.通过

tableViewer.setInput(objs);

数据如何组织(Controller)

tableViewer.setContentProvider(newArrayContentProvider)

数据如何显示(Viewer)

tableViewer.setLabelProvider(..);


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

下面是一个具体table和tableviewer的demo:

依赖于5个包:

importjava.util.List;importorg.eclipse.jface.viewers.ArrayContentProvider;

importorg.eclipse.jface.viewers.ColumnLabelProvider;

importorg.eclipse.jface.viewers.TableViewer;

importorg.eclipse.jface.viewers.TableViewerColumn;

importorg.eclipse.swt.SWT;importorg.eclipse.swt.layout.GridData;

importorg.eclipse.swt.layout.GridLayout;

importorg.eclipse.swt.widgets.Display;

importorg.eclipse.swt.widgets.Shell;importorg.eclipse.swt.widgets.Table;

importorg.eclipse.swt.widgets.TableColumn;

importorg.eclipse.swt.widgets.TableItem;importcom.google.common.collect.Lists;

class People {

String name;

String age;intindex;publicPeople(intindex, String name, String age) {this.name = name;this.age = age;this.index = index;

}publicStringgetName() {returnname;

}publicStringgetAge() {returnage;

}publicintgetIndex() {returnindex;

}

}publicclassDemo{publicstaticvoidmain(String[] args) {

Display display = Display.getDefault();

Shell shell =newShell(display);

shell.setMaximized(true);

shell.setLayout(newGridLayout(2,false));

Table table =newTable(shell, SWT.MULTI | SWT.FULL_SELECTION

| SWT.CHECK);

table.setToolTipText("SWT table demo");

table.setLayoutData(newGridData(SWT.FILL, SWT.FILL,false,true));

table.setHeaderVisible(true);

table.setLinesVisible(true);

createColumLabel(table);

List objs = createData();for(introw =0; row < objs.size(); row++) {

TableItem item =newTableItem(table, SWT.FILL);// 依赖于具体参数for(intcol =0; col < table.getColumnCount(); col++) {if(objs.get(row) !=null) {switch(col) {case0:

item.setText(col, objs.get(row).getIndex() +"");break;case1:

item.setText(col, objs.get(row).getName());break;case2:

item.setText(col, objs.get(row).getAge());

}

}

}

}

table.pack();

TableViewer tableViewer =newTableViewer(shell, SWT.CHECK

| SWT.FULL_SELECTION);

createColumLabel(tableViewer);

tableViewer.setContentProvider(newArrayContentProvider());

tableViewer.setInput(objs);

shell.open();while(!shell.isDisposed()) {if(!display.readAndDispatch()) {continue;

}

}

}privatestaticvoidcreateColumLabel(Table table) {for(inti =0; i <3; i++) {

TableColumn tc =newTableColumn(table, SWT.CENTER);

tc.setResizable(false);

tc.setWidth(250);

}

}privatestaticListcreateData() {

List peoples = Lists.newArrayList();

peoples.add(newPeople(1,"Li hua","20"));

peoples.add(newPeople(2,"Wang qiang","30"));

peoples.add(newPeople(3,"Zhang wei","40"));returnpeoples;

}privatestaticvoidcreateColumLabel(TableViewer tableViewer) {

TableViewerColumn viewerColum1 =newTableViewerColumn(tableViewer,

SWT.NONE);

viewerColum1.setLabelProvider(newColumnLabelProvider() {@OverridepublicStringgetText(Object element) {if(elementinstanceofPeople) {returnPeople.class.cast(element).getIndex() +"";

}returnsuper.getText(element);

}

});

TableViewerColumn viewerColum2 =newTableViewerColumn(tableViewer,

SWT.NONE);

viewerColum2.setLabelProvider(newColumnLabelProvider() {@OverridepublicStringgetText(Object element) {if(elementinstanceofPeople) {returnPeople.class.cast(element).getName();

}returnsuper.getText(element);

}

});

TableViewerColumn viewerColum3 =newTableViewerColumn(tableViewer,

SWT.NONE);

viewerColum3.setLabelProvider(newColumnLabelProvider() {@OverridepublicStringgetText(Object element) {if(elementinstanceofPeople) {returnPeople.class.cast(element).getAge();

}returnsuper.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 中的 SWT & JFACE)