3
我有一個TableViewer
小部件,它有一列,表格內容中的每一行都是一個Composite
以及一些子部件。該列有一個標籤提供程序,它是OwnerDrawLabelProvider
的子類。標籤提供者應該在表格單元格中渲染Composite
子元素,但是當調用paint()
時,不會呈現任何內容。無法在OwnerDrawLabelProvider中繪製複合
我已經找到了如何借鑑在細胞的區域繪製Composite
的內容,普通或樣式文本的項目,或在傳入的Event
對象使用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());
這裏是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();
}
謝謝!表編輯器做到了。 – 2010-02-28 15:18:47