一、实现流程
在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);