2011-06-15 61 views
1

我想在Eclipse SWT中實現可編輯的表格查看器。我認爲我做了所有事情直到現在,問題是表格不可編輯 - 如果我點擊任何行,沒有任何反應。TableViewer單元格編輯器不工作 - 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; 
    } 

} 
} 

做完所有這些後,會出現什麼問題?

在此先感謝!

+1

我看起來不像純SWT,你使用JFace ..? – Sorceror 2011-06-15 20:28:44

+0

是的,不是簡單的SWT對不起 – AndaP 2011-06-16 07:31:08

回答

3

我發現了這個錯誤,似乎我忘了設置列的屬性。我補充說:

tableViewer.setColumnProperties(columnNames); 

現在它工作正常,我可以編輯我的任何細胞!

+0

感謝您的提示!我忽略了這一點,並浪費了很多它調試這個! – mihirg 2014-03-06 07:16:01

0

getValue()中的switch語句在每種情況下都會忽略break;,它始終將結果設置爲「unknown」。

然後,如果我在JFace Snippetsexample比較你的代碼,看來你是在修改缺少

tableViewer.update(.); 

()。

但是,這兩個問題都無法解釋爲什麼當單擊單元格時「沒有任何反應」。由於我們沒有你的運行片段,我們只能推測。你調試了嗎?當您在getValue()和modify()中設置斷點並單擊某個單元格時,是否會觸發斷點?

更新:既然你寫了,你的代碼根本沒有打到,這個問題很可能在你沒有給我們顯示的代碼中。

請閱讀ColumnViewer.setCellEditor()的Javadoc:

用戶建立一個可編輯 的TreeViewer或TableViewer的更多 比1列必須通過 SWT.FULL_SELECTION樣式位

檢查你的桌子有這樣的風格。

+0

是的,我在getValue和修改中都設置了斷點,並且在單擊單元格時它們沒有被調用。你對這次突破是正確的。在交換機中,我稍後添加了它們。 – AndaP 2011-06-16 07:27:33