JFace中MVC的表的单元格编辑功能的实现

news2025/5/25 0:44:48

一、实现流程

在JFace中实现MVC模式的表格编辑功能通常需要以下步骤:
1、启用编辑模式:

  • 调用TableVierer对象的setCellModifier()方法,设置一个ICellModifier对象,以便在表格中启用编辑模式。
  • 实现ICellModifier接口的canModify()方法,用于确定指定单元格是否可以编辑。
  • 实现ICellModifier接口的getValue()方法,用于获取指定单元格的当前值,即设置当前单元格处于编辑状态时所显示的值。
  • 实现ICellModifier接口的modify()方法,用于修改指定单元格的值,即设置单元格修改后所显示的值。
    2、处理编辑事件:
  • 监听表格的编辑事件,例如SWT.Modify事件或SWT.Selection事件。
  • 在事件处理程序中更新数据模型,并调用refresh()方法来刷新表格显示新的数据。

二、实现用例

//新建实体类
public class KingbaseUserGroupMemberEntity implements Serializable {
	
	private static final long serialVersionUID = -8343704923747926169L;
	private String name;
	private long oid;
	private boolean isUser;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public long getOid() {
		return oid;
	}
	public void setOid(long oid) {
		this.oid = oid;
	}
	public boolean isUser() {
		return isUser;
	}
	public void setUser(boolean isUser) {
		this.isUser = isUser;
	}
	@Override
	public boolean equals(Object obj) {
		if(obj instanceof KingbaseUserGroupMemberEntity) {
			KingbaseUserGroupMemberEntity entity = (KingbaseUserGroupMemberEntity)obj;
			return this.name.equals(entity.getName()) && this.isUser == entity.isUser();
		}else {
			return false;
		}
		
	}
}
//创建实现ICellModifier接口的Modify对象
public class UserGroupMemberModifier implements ICellModifier {
	/**
	 * 
	 * 支撑名称
	 */
	public final String[] PROP_NAME = { "checkbox", "name", };
	/**
	 * 下来列表选项
	 */
	String[] member;
	/**
	 * 表格视图
	 */
	TableViewer tableViewer;

	public UserGroupMemberModifier(TableViewer tableViewer,String[] member) {
		super();
		this.tableViewer=tableViewer;
		this.member = member;
	}

	@Override
	public boolean canModify(Object element, String property) {
		if (PROP_NAME[1].equals(property)) {
			return true;
		} else {
			return false;
		}

	}

	@Override
	public Object getValue(Object element, String property) {
		KingbaseUserGroupMemberEntity entity = (KingbaseUserGroupMemberEntity) element;
		if (PROP_NAME[1].equals(property)) {
			for (int i = 0; i < kmember.size(); i++) {
				if (entity.getName().equals(kmember.toArray(new String[kmember.size()])[i])) {
					return i;
				}
			}
			return 0;
		} else {
			return null;
		}
	}

	@Override
	public void modify(Object element, String property, Object value) {
		element = ((TableItem) element).getData();
		KingbaseUserGroupMemberEntity entity = (KingbaseUserGroupMemberEntity) element;
		if (PROP_NAME[1].equals(property)) {
			entity.setName(member[Integer.parseInt(value.toString())]);
			entity.setUser(isUser);
		}
		tableViewer.update(entity,null);;
	}

}

//新建带有复选框与下拉列表的表格
//省略标签提供器与内容提供器的创建
Table t2 = new Table(parent,
		SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.CHECK);
t2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));
t2.setHeaderVisible(true);
t2.setLinesVisible(true);
String[] strs = null;
strs = new String[] {"全部", "成员名称"};

for (int index = 0; index < strs.length; index++) {
	TableColumn tableColumn = new TableColumn(t2, SWT.NONE | SWT.CENTER);
	if (index != 0) {
		tableColumn.setMoveable(true);
	}
	tableColumn.setText(strs[index]);
}
t2.redraw();
CheckboxTableViewer checkboxTableViewer = new CheckboxTableViewer(t2);
checkboxTableViewer.setContentProvider(new ContentProvider());
checkboxTableViewer.setLabelProvider(new UserGroupMemberProvider());
checkboxTableViewer.setColumnProperties(TableFieldModifier.PROP_NAME);
checkboxTableViewer.setInput(new KingbaseUserGroupMemberEntity());
TableTool.tableCulomnPack(t2);
TableTool.allSelectListener(t2, checkboxTableViewer, 0);

//kmember为从数据库中查询到的结果集集合
String[] memberList = kmember.toArray(new String[kmember.size()]);
final CellEditor[] cellEditors = new CellEditor[3];
cellEditors[0] = null;
cellEditors[1] = new ComboBoxCellEditor(checkboxTableViewer.getTable(),memberList, SWT.READ_ONLY);
cellEditors[1].addListener(new ICellEditorListener() {
	@Override
	public void editorValueChanged(boolean oldValidState, boolean newValidState) {
	}

	@Override
	public void cancelEditor() {
	}

	@Override
	public void applyEditorValue() {

	}
});
//设置ICellModifier对象
checkboxTableViewer.setCellModifier(new UserGroupMemberModifier(checkboxTableViewer,memberList));
checkboxTableViewer.setCellEditors(cellEditors);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2384981.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

canal实现mysql数据同步

目录 1、canal下载 2、mysql同步用户创建和授权 3、canal admin安装和启动 4、canal server安装和启动 5、java 端集成监听canal 同步的mysql数据 6、java tcp同步只是其中一种方式&#xff0c;还可以通过kafka、rabbitmq等方式进行数据同步 1、canal下载 canal实现mysq…

易境通专线散拼系统:全方位支持多种专线物流业务!

在全球化电商快速发展的今天&#xff0c;跨境电商物流已成为电商运营中极为重要的环节。为了确保物流效率、降低运输成本&#xff0c;越来越多的电商卖家选择专线物流服务。专线物流作为五大主要跨境电商物流模式之一&#xff0c;通过固定的运输路线和流程&#xff0c;极大提高…

06 如何定义方法,掌握有参无参,有无返回值,调用数组作为参数的方法,方法的重载

1.调用方法 2.掌握有参函数 3.调用数组作为参数 一个例题&#xff1a;数组参数&#xff0c;返回值 方法的重载 两个例题&#xff1a;冒泡排序和九九乘法表的格式学习

使用vscode MSVC CMake进行C++开发和Debug

使用vscode MSVC CMake进行C开发和Debug 前言软件安装安装插件构建debuug方案一debug方案二其他 前言 一般情况下我都是使用visual studio来进行c开发的&#xff0c;但是由于python用的是vscode&#xff0c;所以二者如果统一的话能稍微提高一点效率。 软件安装 需要安装的软…

提升开发运维效率:原力棱镜游戏公司的 Amazon Q Developer CLI 实践

引言 在当今快速发展的云计算环境中&#xff0c;游戏开发者面临着新的挑战和机遇。为了提升开发效率&#xff0c;需要更智能的工具来辅助工作流程。Amazon Q Developer CLI 作为亚马逊云科技推出的生成式 AI 助手&#xff0c;为开发者提供了一种新的方式来与云服务交互。 Ama…

@Column 注解属性详解

提示&#xff1a;文章旨在说明 Column 注解属性如何在日常开发中使用&#xff0c;数据库类型为 MySql&#xff0c;其他类型数据库可能存在偏差&#xff0c;需要注意。 文章目录 一、name 方法二、unique 方法三、nullable 方法四、insertable 方法五、updatable 方法六、column…

基于 ESP32 与 AWS 全托管服务的 IoT 架构:MQTT + WebSocket 实现设备-云-APP 高效互联

目录 一、总体架构图 二、设备端(ESP32)低功耗设计(适配 AWS IoT) 1.MQTT 设置(ESP32 连接 AWS IoT Core) 2.低功耗策略总结(ESP32) 三、云端架构(基于 AWS Serverless + IoT Core) 1.AWS IoT Core 接入 2.云端 → APP:WebSocket 推送方案 流程: 3.数据存…

unity在urp管线中插入事件

由于在urp下&#xff0c;打包后传统的相机事件有些无法正确执行&#xff0c;这时候我们需要在urp管线中的特定时机进行处理一些事件&#xff0c;需要创建继承ScriptableRenderPass和ScriptableRendererFeature的脚本&#xff0c;示例如下&#xff1a; PluginEventPass&#xf…

docker安装es连接kibana并安装分词器

使用Docker部署Elasticsearch、Kibana并安装分词器有以下主要优点&#xff1a; 1. 快速部署与一致性 一键式部署&#xff1a;通过Docker Compose可以快速搭建完整的ELK栈环境 环境一致性&#xff1a;确保开发、测试和生产环境完全一致&#xff0c;避免"在我机器上能运行…

线性回归中涉及的数学基础

线性回归中涉及的数学基础 本文详细地说明了线性回归中涉及到的主要的数学基础。 如果数学基础很扎实可以直接空降博文: 线性回归&#xff08;一&#xff09;-CSDN博客 一、概率、似然与概率密度函数 1. 概率&#xff08;Probability&#xff09; 定义&#xff1a;概率是描述…

如何计算VLLM本地部署Qwen3-4B的GPU最小配置应该是多少?多人并发访问本地大模型的GPU配置应该怎么分配?

本文一定要阅读我上篇文章&#xff01;&#xff01;&#xff01; 超详细VLLM框架部署qwen3-4B加混合推理探索&#xff01;&#xff01;&#xff01;-CSDN博客 本文是基于上篇文章遗留下的问题进行说明的。 一、本文解决的问题 问题1&#xff1a;我明明只部署了qwen3-4B的模型…

Attu下载 Mac版与Win版

通过Git地址下载 Mac 版选择对于的架构进行安装 其中遇到了安装不成功&#xff0c;文件损坏等问题 一般是两种情况导致 1.安装版本不对 2.系统权限限制 https://www.cnblogs.com/similar/p/11280162.html打开terminal执行以下命令 sudo spctl --master-disable安装包Git下载地…

V2X协议|如何做到“车联万物”?【无线通信小百科】

1、什么是V2X V2X&#xff08;Vehicle-to-Everything&#xff09;即“车联万物”&#xff0c;是一项使车辆能够与周围环境实现实时通信的前沿技术。它允许车辆与其他交通参与者和基础设施进行信息交互。通过V2X&#xff0c;车辆不仅具备“远程感知”能力&#xff0c;还能在更大…

[测试_3] 生命周期 | Bug级别 | 测试流程 | 思考

目录 一、软件测试的生命周期&#xff08;重点&#xff09; 1、软件测试 & 软件开发生命周期 &#xff08;1&#xff09;需求分析 &#xff08;2&#xff09;测试计划 &#xff08;3&#xff09;测试设计与开发 &#xff08;4&#xff09;测试执行 &#xff08;5&am…

RabbitMQ ⑤-顺序性保障 || 消息积压 || 幂等性

幂等性保障 幂等性&#xff08;Idempotency&#xff09; 是计算机科学和网络通信中的一个重要概念&#xff0c;指的是某个操作无论被执行多少次&#xff0c;所产生的效果与执行一次的效果相同。 应用程序的幂等性&#xff1a; 在应用程序中&#xff0c;幂等性就是指对一个系统…

java基础知识回顾1(可用于Java基础速通)考前,面试前均可用!

目录 一、初识java 二、基础语法 1.字面量 2.变量 3.关键字 4.标识符 声明&#xff1a;本文章根据黑马程序员b站教学视频做的笔记&#xff0c;可对应课程听&#xff0c;课程链接如下: 02、Java入门&#xff1a;初识Java_哔哩哔哩_bilibili 一、初识java Java是美国 sun 公…

云原生CICD-Tekton入门到精通

文章目录 一、Tekton介绍二、Tekton组件介绍三、执行流程四、安装Tekton管道五、安装Tekton Dashboard六、安装Tekton Cli七、运行单Task八、运行流水线九、在流水线中使用secret十、taskSpec、taskRef、pipelineRef、pipelineSpec使用pipelineRef与taskRef结合使用(推荐)pipel…

opencv 图像的平移和旋转

warpAffine函数讲解,图片可自行下载&#xff0c;也可用自己的图片 原图im 平移im_shifted 旋转im_rotated # 图像仿射变换 # 步骤&#xff1a; 读取图像 -> 创建仿射变换矩阵 -> 仿射变换计算 # 平移变换矩阵&#xff1a;一种写法&#xff0c;直接写死 # 旋转变…

IDEA2025版本使用Big Data Tools连接Linux上Hadoop的HDFS

目录 Windows的准备 1. 将与Linux上版本相同的hadoop压缩包解压到本地 ​编辑2.设置$HADOOP HOME环境变量指向:E:\hadoop-3.3.4 3.下载hadoop.dll和winutils.exe文件 4.将hadoop.dll和winutils.exe放入$HADOOP HOME/bin中 IDEA中操作 1.下载Big Data Tools插件 2.添加并连…

hysAnalyser特色的TS流编辑、剪辑和转存MP4功能说明

摘要 hysAnalyser 是一款特色的 MPEG-TS 数据分析工具&#xff0c;融合了常规TS文件的剪辑&#xff0c;转存功能&#xff0c;可用于平常的视频开发和测试。 本文详细阐述了对MPEG-TS 流的节目ID&#xff0c;名称&#xff0c;PID&#xff0c;时间戳&#xff0c;流类型&#xff…