Java 无法在OwnerDrawLabelProvider中绘制组合

Java 无法在OwnerDrawLabelProvider中绘制组合,java,swt,eclipse-rcp,jface,Java,Swt,Eclipse Rcp,Jface,我有一个带有单列的TableViewer小部件,其中表内容中的每一行都是一个带有多个子小部件的组合。该列有一个标签提供程序,它是OwnerDrawLabelProvider的子类。标签提供程序应该在表单元格中呈现组合子项,但是当调用paint()时,不会呈现任何内容 我发现了许多关于如何在传入的事件对象中使用GC绘制纯文本或样式文本项或原语的示例,但没有关于在单元格区域中绘制组合内容的示例 这可能吗?如果可能,我做错了什么 以下是创建表的代码: viewer = new TableVie

我有一个带有单列的
TableViewer
小部件,其中表内容中的每一行都是一个带有多个子小部件的
组合。该列有一个标签提供程序,它是
OwnerDrawLabelProvider
的子类。标签提供程序应该在表单元格中呈现组合子项,但是当调用
paint()
时,不会呈现任何内容

我发现了许多关于如何在传入的
事件
对象中使用
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());
以下是自定义标签提供程序的
测量
绘制
方法,
复合标签提供程序

    @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();
    }

我认为OwnerDrawLabelProvider是用于使用GC绘制自己的组件的。如果只希望在表中呈现普通SWT小部件,则可能应该使用TableEditor和#setEditor(控件)来设置要在表单元格中显示的控件