JFace中MVC的表格使用介绍

一、使用流程

当在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();
相关推荐
mldong5 小时前
引擎从不发一条消息:jeeflow 的两类扩展点与消息模块的分工
java·架构
君顾15 小时前
智慧零售实战指南:从技术架构到落地方案全解析
java·开发语言·零售
南棱笑笑生5 小时前
20260904实测给飞凌OK3576-C开发板刷入Rockchip原厂的IMG固件【使用飞凌的DTS】切换串口波特率为1.5Mbps
c语言·开发语言·rockchip
zhanghe6876 小时前
es的密码带有特殊字符,导出
java
平头哥技术团队6 小时前
Day 10 | 工欲善其事:VS Code 配置与项目归档
android·开发语言·前端·javascript·html·交互
pnoker6 小时前
IoT DC3 概念解读:把设备抽象成一套语义模板——位号、指令、事件与面向智能体的设备建模
java·人工智能·物联网·iot·dc3
乌萨奇也要立志学C++6 小时前
【洛谷】kmp算法
开发语言·算法
my_realmy6 小时前
Java SE 基础学习笔记(一):面向对象、继承多态、抽象接口与异常(JDK 8)
java·多线程·并发··生产者消费者模式
传奇开心果编程6 小时前
【Rust入门知识点学与练】第4课:条件判断 if / else
开发语言·学习·rust
m0_380743877 小时前
给 Claude API 调用补上超时重试和错误分类
开发语言·人工智能·php