2016-05-03 8 views
0

Je suis en train de remplacer JFace TableViewer par NatTable. Dans ma mise en œuvre avec TableViewer j'ai des images dans les cellules, et j'ai implémenté ILabelProvider qui est conscient de la façon d'obtenir une image pour l'état concret de l'objet à l'exécution. Donc, j'appelle ILabelProvider.getImage(element) de ColumnLabelProvider.Icônes dans les cellules NatTable

Dans NatTable, je connais le moyen d'ajouter une image en enregistrant configAttribute par configLabel. Et pour configAttribute je devrais explicitement dire quelle image utiliser. Sûrement je peux créer l'étiquette pour chaque état, enregistrer l'image pour chaque étiquette et utiliser ConfigLabelAccumulator pour lier tout à togeather. Mais la quantité d'images est assez énorme, et de plus je ne veux pas dupliquer cette logique. Alors, y a-t-il un moyen plus approprié pour un tel cas? Il suffit de déléguer à ILabelProvider existant?

+0

Voir https://www.eclipse.org/forums/index.php/t/491100/ –

Répondre

2

Dans les cas où vous avez une certaine dynamique pour récupérer le Image, la solution d'étiquette est insuffisante (par exemple lorsque vous pensez à un système de magasin avec différentes images par objet de ligne). Dans de tels cas, vous implémentez généralement un ImagePainter personnalisé et implémentez le code pour déterminer le Image à utiliser dans la méthode getImage().

L'extrait suivant peut être utilisé comme point de départ où vous devez uniquement implémenter votre logique personnalisée pour déterminer le Image à utiliser. De cette façon, il vous suffit d'en enregistrer un ImagePainter. Dans NatTable, cela est également fait pour certaines images statiques comme par exemple le TreeImagePainter.

public class ContentDependentImagePainter<T> extends ImagePainter { 

    IRowDataProvider<T> dataProvider; 

    public ContentDependentImagePainter(IRowDataProvider<T> dataProvider) { 
     this.dataProvider = dataProvider; 
    } 

    @Override 
    protected Image getImage(ILayerCell cell, IConfigRegistry configRegistry) { 
     // get the row object 
     T rowObject = dataProvider.getRowObject(cell.getRowIndex()); 
     Image result = null; 

     // perform your custom logic to determine the Image 

     return result; 
    } 
}