2017-05-08 1 views
0

J'ai un TableViewer et j'aime avoir un graphique sur une colonne. Comment puis-je faire ceci?JFace TableViewer: écrire sur le canevas

Ce qui ne fonctionne pas est:

J'ai essayé le TableEditor avec une toile, extrait de code:

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

avec MyCanvas ayant un PaintListener faire le travail de dessin. Cela a fonctionné dessin sur la cellule de table, mais quand le tableViewer a été filtré, la colonne graphique - et seulement cela - est restée non filtrée: Disons que la table avait 100 lignes et le filtre correspondait à 80 lignes, le résultat était de 80 lignes avec données mais 100 lignes avec le Canvas, donc aussi 20 lignes où rien d'autre que le Canvas a été montré.

Je suppose que le problème vient du fait que TableEditor soit sur la table plutôt que sur TableViewer. J'ai découvert qu'il y a TableViewer.setCellEditors() mais je n'arrive pas à comprendre comment je pourrais l'utiliser pour écrire sur la toile d'une cellule (colonne).

Peut-être y a-t-il encore une autre possibilité de n'utiliser aucun éditeur pour obtenir le canevas d'une cellule de tableau (filtrée!). Merci beaucoup pour toute suggestion de solution.

+0

Vous pouvez regarder en utilisant 'OwnerDrawLabelProvider' en tant que fournisseur d'étiquettes de colonne. Cela vous permet de dessiner la colonne directement. –

+0

Merci beaucoup - cela a fait l'affaire! –

Répondre

0

accoring à greg449's indice, la solution est:

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 
    }  

}