【问题标题】:TableViewer cell editor not working - SWTTableViewer 单元格编辑器不工作 - SWT
【发布时间】:2011-06-17 00:42:57
【问题描述】:

我正在尝试在 Eclipse SWT 中实现一个可编辑的表查看器。我想我到目前为止一切都做得很好,问题是表格不可编辑 - 如果我点击任何行,什么都不会发生。

我已经在我的所有专栏中注册了一些 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;
    }   

}
}

做完这一切,还有什么问题?

提前致谢!

【问题讨论】:

  • 我看起来不像普通的 SWT,你用 JFace..?我在普通表上实现了一次单元格编辑器,它完全不同的代码..

标签: java eclipse eclipse-plugin swt jface


【解决方案1】:

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

tableViewer.setColumnProperties(columnNames);

现在它工作正常,我可以编辑我的任何单元格!

【讨论】:

  • 感谢您的提示!我忽略了这一点,浪费了很多时间来调试它!
【解决方案2】:

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

然后,如果我将您的代码与JFace Snippets 中的example 进行比较,您似乎缺少了

tableViewer.update(.);

在修改()中。

但是,当您单击单元格时,这两个问题都不能解释为什么“什么都没有发生”。由于我们没有您提供的正在运行的 sn-p,我们只能推测。你调试了吗?当你在getValue()和modify()中设置断点,然后点击一个单元格,你打断点了吗?

更新:既然你写了,你的代码根本没有受到打击,问题很可能出在你没有向我们展示的代码中。

请阅读ColumnViewer.setCellEditor()的Javadoc:

用户设置可编辑 具有更多功能的 TreeViewer 或 TableViewer 超过 1 列必须通过 SWT.FULL_SELECTION 样式位

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

【讨论】:

  • 是的,我在 getValue 和 modify 中都设置了断点,单击单元格时没有调用它们。关于休息,你是对的;在 switch 中,我稍后添加了它们。
猜你喜欢
  • 2012-03-16
  • 2013-02-06
  • 1970-01-01
  • 2015-06-21
  • 2021-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多