2017-05-08 40 views
0

我有一個TableViewer,喜歡有一個列上的圖形。我怎樣才能做到這一點?JFace TableViewer:寫在畫布上

什麼不工作是:

我試過TableEditor用帆布,片段:

MyCanvas canvas = new MyCanvas (tableViewer.getTable(), SWT.NONE, (MyClass)item.getData()); 

與具有PaintListener MyCanvas做繪圖工作。

它在繪製表格單元格上工作,但是當tableViewer被過濾時,圖形列 - 只有這個 - 保持未過濾:可以說表格有100行,過濾器匹配80行,結果是80行數據,但Canvas有100行,所以還有20行,除了Canvas之外沒有別的東西。

我想問題來自桌上的TableEditor而不是TableViewer。我發現有TableViewer.setCellEditors(),但我不知道如何使用它來寫入單元格(列)畫布。

也許還有另一種可能性,即不使用編輯器來獲取(過濾!)表格單元格的畫布。非常感謝任何解決方案提示。

+0

你可能想看看使用'OwnerDrawLabelProvider'作爲列標籤供應商。這可讓您直接自行繪製列。 –

+0

非常感謝 - 這就是訣竅! –

回答

0

Accoring到greg449's提示,解決的辦法是:

TableViewerColumn tvc = new TableViewerColumn(tableViewer, SWT.NONE); 
tvc.getColumn().setText("Headline"); 
tvc.getColumn().setWidth(200); 
tvc.setLabelProvider(new ProjectBarDrawer()); 

... 

class ProjectBarDrawer extends OwnerDrawLabelProvider { 

    @Override 
    protected void paint(Event event, Object element) { 
    // do the painting on event.gc here 
    }  

}