Canvas JFace TableViewer:在画布上书写

Canvas JFace TableViewer:在画布上书写,canvas,swt,cell,jface,tableviewer,Canvas,Swt,Cell,Jface,Tableviewer,我有一个TableViewer,希望在一列上有一个图形。我该怎么做 不起作用的是: 我用画布尝试了TableEditor,代码片段: MyCanvas canvas = new MyCanvas (tableViewer.getTable(), SWT.NONE, (MyClass)item.getData()); MyCanvas有一个PaintListener来完成绘图工作 它可以在表格单元格上绘制,但是当过滤了tableViewer时,图形列(只有这个)保持未过滤状态:假设表格有100行

我有一个TableViewer,希望在一列上有一个图形。我该怎么做

不起作用的是:

我用画布尝试了TableEditor,代码片段:

MyCanvas canvas = new MyCanvas (tableViewer.getTable(), SWT.NONE, (MyClass)item.getData());
MyCanvas有一个
PaintListener
来完成绘图工作

它可以在表格单元格上绘制,但是当过滤了
tableViewer
时,图形列(只有这个)保持未过滤状态:假设表格有100行,过滤器匹配了80行,结果是80行数据,100行画布,20行只显示画布

我想问题在于将TableEditor放在表上而不是放在TableViewer上。我发现有
TableViewer.setcelleeditors()
,但我不知道如何使用它写入单元格(列)画布


也许还有另一种可能,不使用编辑器来获取(过滤的!)表格单元格的画布。非常感谢任何解决方案提示。

根据greg449的提示,解决方案是:

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
  }     

}

您可能希望使用
OwnerDrawLabelProvider
作为列标签提供程序。这可以让你自己直接画专栏。非常感谢-这就成功了!