単一の列を持つTableViewer
ウィジェットがあり、テーブルのコンテンツの各行にはComposite
、いくつかの子ウィジェットがあります。列には、のサブクラスであるラベルプロバイダーがありOwnerDrawLabelProvider
ます。ラベルプロバイダーはComposite
テーブルセルの子をレンダリングすることになっていますが、paint()
が呼び出されると、何もレンダリングされません。
GC
渡されたEvent
オブジェクトでinを使用して、プレーンまたはスタイル付きのテキストアイテム、またはプリミティブを描画する方法について多くの例を見つけましたComposite
が、セルの領域にaのコンテンツを描画する方法については何もありません。
これは可能ですか?もしそうなら、私は何を間違っていますか?
テーブルを作成するためのコードは次のとおりです。
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();
}