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(控件)来设置要在表单元格中显示的控件