2017-05-08 8 views
0

私はTableViewerを持っていて、1つの列にグラフィックスを持つのが好きです。これどうやってするの?動作していないことは何JFace TableViewer:キャンバスに書く

は次のとおりです。

私はキャンバスでTableEditorを試してみました、スニペット:

MyCanvas canvas = new MyCanvas (tableViewer.getTable(), SWT.NONE, (MyClass)item.getData()); 

をMyCanvasが描画仕事をしてPaintListenerを持ちます。

テーブルセルで図面を作成しましたが、tableViewerをフィルタリングすると、グラフィックスの列がフィルタリングされずに残っていました:テーブルに100行、フィルタが80行に一致したとします。データは100行、Canvasは20行もあり、Canvas以外は何も表示されませんでした。

問題はTableViewerではなくTableEditorを持つことに起因すると考えられます。私はTableViewer.setCellEditors()があることを知りましたが、私はそれを使ってセルの(列の)キャンバスに書き込む方法を理解できません。

おそらく、エディタを使用せずに(フィルタされた!)表のセルのキャンバスを取得する可能性もあります。ソリューションのヒントありがとうございました。 greg449'sにAccoring

+0

あなたが列ラベル・プロバイダーとして 'OwnerDrawLabelProvider'を使用して見たいかもしれません。これにより、列を直接描画することができます。 –

+0

ありがとう、そのトリックでした! –

答えて

0

はヒント、解決策は次のとおりです。

TableViewerColumn tvc = new TableViewerColumn(tableViewer, SWT.NONE); 
tvc.getColumn().setText("Headline"); 
tvc.getColumn().setWidth(200); 
tvc.setLabelProvider(new ProjectBarDrawer()); 

... 

class ProjectBarDrawer extends OwnerDrawLabelProvider { 

    @Override 
    protected void paint(Event event, Object element) { 
    // do the painting on event.gc here 
    }  

} 
関連する問題