【问题标题】:JFace TableViewer: Write on canvasJFace TableViewer:在画布上书写
【发布时间】:2017-05-09 13:34:07
【问题描述】:

我有一个 TableViewer,并且喜欢在一列上有一个图形。我该怎么做?

什么不工作是:

我用 Canvas 尝试了 TableEditor,sn-p:

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

MyCanvas 有一个 PaintListener 做绘图工作。

它可以在表格单元格上绘图,但是当 tableViewer 被过滤时,图形列 - 只有这个 - 保持未过滤:假设表格有 100 行,过滤器匹配 80 行,结果是 80 行有数据,但 Canvas 有 100 行,所以还有 20 行,除了 Canvas 什么都没有显示。

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

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

【问题讨论】:

  • 您可能希望查看使用OwnerDrawLabelProvider 作为列标签提供程序。这使您可以直接自己绘制列。
  • 非常感谢 - 成功了!

标签: canvas swt cell jface tableviewer


【解决方案1】:

根据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
  }     

}

【讨论】:

    猜你喜欢
    • 2011-12-28
    • 2011-03-05
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 2011-10-02
    • 2018-08-23
    相关资源
    最近更新 更多