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就写到这里。。
时间: 2024-10-26 19:29:10