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

一、实现流程

在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);
相关推荐
空心木偶☜2 分钟前
A2A2A(多智能体协作)
开发语言·python·ai·ai编程
Cc.Y5 分钟前
Java零基础入门:类与对象深度掌握 —— 从“零散变量“到“打包管理“
java·开发语言·python
\光辉岁月/6 分钟前
2.java变量
java·开发语言·变量
Wang's Blog9 分钟前
Java 项目实战: 外卖平台优化-前端dist部署与Nginx反向代理rewrite
java·前端·nginx
专业程序开发源10 分钟前
springboot生命故事书制作小程序65290-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·mysql·小程序·课程设计
夏天的清晨22 分钟前
C++入门学习
开发语言·c++·学习
代码山河25 分钟前
Java的前世今生:从Oak语言到Java 23的发展史
java·学习·架构·教程·面向对象·项目
新鲜势力呀25 分钟前
PHP 文件上传系统实战:从上传卡顿到分片上传 + 秒传 + 云存储架构完整优化方案
开发语言·架构·php
vx_Biye_Design26 分钟前
springboot角色扮演服务平台65161-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·spring·课程设计
李游Leo27 分钟前
HarmonyOS 7 QuickDock 闪控窗开发实录 02:floatView × floatingBall:形态切换、位置恢复与单一状态源【鸿蒙心迹】
java·华为·harmonyos