我正在尝试在Eclipse SWT中实现可编辑的表查看器。我想我到目前为止一切都做得很好,问题是桌子不可编辑 - 如果我点击任何一行就没有任何反应。
我已经在我的所有专栏中注册了一些CellEditors:
CellEditor[] editors = new CellEditor[columnNames.length];
editors[0] = new TextCellEditor(table);
//do the above for all columns
tableViewer.setCellEditors(editors);
然后我为我的表指定一个单元格修饰符:
tableViewer.setCellModifier(new CellModifier(this));
CellModifier类如下所示:
public class CellModifier implements ICellModifier{
private DBStructureView dbView;
public CellModifier(DBStructureView view){
super();
this.dbView = view;
}
@Override
public boolean canModify(Object element, String property) {
return true;
}
@Override
public Object getValue(Object element, String property) {
int columnIndex = dbView.getColumnNames().indexOf(property);
Object result = null;
AttributeNode node = (AttributeNode) element;
switch(columnIndex){
case 0://row id
result = node.getRow();
case 1://name
result = node.getName();
case 2://value
result = node.getValue();
default:
result = "unknown";
}
System.out.println(result);
return result;
}
@Override
public void modify(Object element, String property, Object value) {
int columnIndex = dbView.getColumnNames().indexOf(property);
TableItem item = (TableItem) element;
AttributeNode node = (AttributeNode)item.getData();
String valueString;
switch(columnIndex){
case 0:
valueString = ((String) value).trim();
node.setRow(valueString);
break;
case 1:
valueString = ((String) value).trim();
node.setName(valueString);
break;
case 2:
valueString = ((String) value).trim();
node.setValue(valueString);
break;
default:
break;
}
}
}
完成所有这些后,会出现什么问题?
提前致谢!
答案 0 :(得分:3)
我发现了这个错误,似乎我忘了设置列的属性。我补充说:
tableViewer.setColumnProperties(columnNames);
现在它工作正常,我可以编辑我的任何细胞!
答案 1 :(得分:0)
getValue()中的switch语句在每种情况下都会错过break;
,它总是将结果设置为“unknown”。
然后,如果我将您的代码与example中的JFace Snippets进行比较,那么您似乎错过了
tableViewer.update(.);
in modify()。
但是,当您单击单元格时,这两个问题都无法解释为什么“没有任何反应”。由于我们没有您的运行代码段,我们只能推测。你调试了吗?在getValue()和modify()中设置断点,然后单击一个单元格时,是否会遇到断点?
更新:由于您写道,您的代码根本没有被点击,问题很可能出在您未向我们展示的代码中。
请阅读ColumnViewer.setCellEditor()的Javadoc:
设置可编辑的用户 TreeViewer或TableViewer更多 超过1列必须通过 SWT.FULL_SELECTION样式位
检查您的表格是否具有该样式位。