一、使用流程
当在Jface中使用MVC模式来展示表格时,通常会遵循以下步骤:
1、创建数据模型:
- 创建一个数据模型实体类用来表示表格中的每一行数据。
- 创建表格的内容提供器和标签提供器,其中内容提供器实现接口IStructuredContentProvider;标签提供器实现接口ITableLabelProvider,分别负责提供表格中的每个单元格的图像和文本以及整个表的数据。
2、创建表格:
- 使用TableViewer类创建表格。
- 设置表格的布局参数,包括样式和布局数据。
- 创建表格列,并设置每列的标签提供器,以便显示数据。
3、设置数据模型: - 将数据模型设置给表格。
- 将数据模型的输入设置为数据列表。
4、更新数据数据。 - 更新数据模型中的数据。
- 调用refresh()方法来刷新表格,以便显示新的数据。
二、用例演示
//创建数据模型
public class Persion {
private String name;
private int age;
//省略构造方法和其他方法,省略getter和setter方法
}
//创建内容提供器
//并实现接口IStructuredContentProvider和ITableLabelProvider
public class PersonTableModel implements IStructuredContentProvider,ITableLabelProvider{
private List<Persion> data;
public PersonTableModel(List<Persion> data) {
this.data = data;
}
//获取元素
@Override
public Object[] getElements(Object inputElement) {
return data.toArray();
}
@Override
public void dispose() {}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
//获取列文本
@Override
public String getColumnText(Object element, int columnIndex) {
Persion persion = (Persion)element;
switch (columnIndex) {
case 0:
return persion.getName();
case 1:
return String.valueOf(Persion.getAge());
default:
return "";
}
}
//获取列图像
@Override
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
}
//创建表格
TableViewer viewer = new TableViewer(parent,SWT.MULTI | style);
GridData gridData = new GridData(GridData.FILL_BOTH);
viewer.getControl().setLayoutData(gridData);
//新建列并设置标签提供器
TableViewerColumn column = new TableViewerColumn(viewer, SWT.None);
column.getColumn().setWidth(100);
column.getColumn().setText("姓名");
column.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
Persion persion = (Persion)element;
return persion.getName();
}
});
column = new TableViewerColumn(viewer, SWT.None);
column.getColumn().setWidth(100);
column.getColumn().setText("年龄");
column.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
Persion persion = (Persion)element;
return String.valueOf(Persion.getAge());
}
});
//设置数据模型
List<Persion> dataList = new ArrayList<>();
dataList.add(new Persion("zhangsan",23));
dataList.add(new Persion("lisi",43));
//设置内容提供器
viewer.setContentProvider(new PersonTableModel(dataList));
viewer.setInput(dataList);
//数据更新
data.add(new Persion("wangwu",33));
viewer.refresh();