Java TableViewer单元格编辑器不工作-SWT

Java TableViewer单元格编辑器不工作-SWT,java,eclipse,eclipse-plugin,swt,jface,Java,Eclipse,Eclipse Plugin,Swt,Jface,我试图在EclipseSWT中实现一个可编辑的表查看器。我想我已经做了一切,直到现在,问题是表是不可编辑的-没有任何事情发生,如果我点击任何一行 我已在我的所有专栏中注册了一些CellEditor: CellEditor[] editors = new CellEditor[columnNames.length]; editors[0] = new TextCellEditor(table); //do the above for all columns tableViewer.setCell

我试图在EclipseSWT中实现一个可编辑的表查看器。我想我已经做了一切,直到现在,问题是表是不可编辑的-没有任何事情发生,如果我点击任何一行

我已在我的所有专栏中注册了一些CellEditor:

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;
    }   

}
}
做了所有这些之后,会出现什么问题


提前谢谢

getValue()中的switch语句错过了
中断在每种情况下,它总是将结果设置为“未知”

然后,如果我将您的代码与中的代码进行比较,似乎您丢失了

tableViewer.update(.);
在modify()中

但这两个问题都不能解释为什么单击单元格时“什么都没发生”。因为我们没有你的一个片段,我们只能推测。你调试了吗?在getValue()和modify()中设置断点并单击单元格时,是否命中了断点

更新:自从您编写代码以来,您的代码根本没有受到攻击,问题很可能出在您没有向我们展示的代码中

请阅读以下文件的Javadoc:

用户设置可编辑的 TreeViewer或TableViewer,具有更多功能 超过1列必须通过 SWT.FULL_选择式钻头


检查您的表是否有该样式位。

我发现了错误,似乎我忘记设置列的属性了。我补充说:

tableViewer.setColumnProperties(columnNames);

现在它运行良好,我可以编辑我的任何单元格

我看起来不像普通的SWT,你用JFace。。?我在普通表上实现了一次单元格编辑器,它的代码完全不同。是的,我在getValue和modify中都设置了断点,在单击单元格时没有调用它们。关于休息你是对的;在交换机中,我稍后添加了它们。谢谢您的提示!我忽略了这一点,浪费了很多时间调试它!