我有一个TableViewer
带有单列的小部件,其中表格内容中的每一行都是一个Composite
带有许多子小部件的小部件。该列有一个标签提供程序,它是 的子类OwnerDrawLabelProvider
。标签提供者应该Composite
在表格单元格中呈现子元素,但是当paint()
被调用时,不会呈现任何内容。
我找到了许多关于如何使用传入GC
的对象中绘制纯文本或样式文本项或原语的示例,但没有在单元格区域中Event
绘制 a 的内容。Composite
这是可能的,如果是这样,我做错了什么?
下面是创建表的代码:
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());
以下是自定义标签提供程序的measure
和paint
方法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();
}