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);
}
}