2010-02-20 30 views
3

我有一個TableViewer小部件,它有一列,表格內容中的每一行都是一個Composite以及一些子部件。該列有一個標籤提供程序,它是OwnerDrawLabelProvider的子類。標籤提供者應該在表格單元格中渲染Composite子元素,但是當調用paint()時,不會呈現任何內容。無法在OwnerDrawLabelProvider中繪製複合

我已經找到了如何借鑑在細胞的區域繪製Composite的內容,普通或樣式文本的項目,或在傳入的Event對象使用GC原語,但沒有了大量的實例。

這是可能的,如果是這樣,我做錯了什麼?

下面是創建該表的代碼:

viewer = new TableViewer(container, SWT.NONE); 
    final Table table = viewer.getTable(); 

    TableViewerColumn viewerColumn = new TableViewerColumn(viewer, SWT.LEFT); 
    TableColumn tableColumn = viewerColumn.getColumn(); 
    tableColumn.setText(Messages.getString("column.header.name")); 
    tableColumn.setResizable(true); 
    tableColumn.setMoveable(false); 
    tableColumn.setWidth(500); 
    viewerColumn.setLabelProvider(new CompositeLabelProvider()); 

這裏是measurepaint方法的自定義標籤供應商,CompositeLabelProvider

@Override 
    protected void measure(Event event, Object element) { 

     CompositeTableItem row = rowMap.get(element); 
     Composite contents = row.getContents(viewer.getTable().getParent()); 
     Point size = contents.computeSize(SWT.DEFAULT, SWT.DEFAULT); 
     event.setBounds(new Rectangle(event.x, event.y, size.x, size.y)); 
    } 

    @Override 
    protected void paint(Event event, Object element) { 

     CompositeTableItem row = rowMap.get(element); 
     Composite contents = row.getContents(viewer.getTable().getParent()); 

     contents.redraw(event.getBounds().x, event.getBounds().y, event.getBounds().width, event.getBounds().height, true); 

     contents.update(); 
    } 

回答

2

我覺得OwnerDrawLabelProvider意味着使用如果你想使用GC繪製你自己的組件。如果您只希望在表格中呈現普通的SWT小部件,則應該使用TableEditor和#setEditor(Control)來設置要在表格單元格中顯示的控件。

+0

謝謝!表編輯器做到了。 – 2010-02-28 15:18:47