所有者DrawlabelProviderで複合材を描画できません
-
21-09-2019 - |
質問
私は持っています TableViewer
テーブルのコンテンツ内の各行は、単一の列を備えたウィジェット Composite
多くの子供ウィジェットがあります。列には、のサブクラスであるラベルプロバイダーがあります OwnerDrawLabelProvider
. 。ラベルプロバイダーは、レンダリングすることになっています Composite
テーブルセルの子供たち、しかしいつ paint()
呼ばれ、何もレンダリングされません。
プレーンまたはスタイルのテキストアイテムを描く方法、または次のようにプリミティブを使用して、いくつかの例を見つけました。 GC
の中に Event
オブジェクトが渡されましたが、の内容を描画することはありません 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();
}
解決
GCを使用して独自のコンポーネントを描画したい場合は、ownerdrawlabelproviderを使用することを意図していると思います。テーブルに通常のSWTウィジェットをレンダリングしたい場合は、おそらくテーブルエディターと#SetEditor(コントロール)を使用して、テーブルセルに表示するコントロールを設定する必要があります。
所属していません StackOverflow