2016-05-03 2 views
0

Я в процессе замены JFace TableViewer с NatTable. В моей реализации с TableViewer у меня есть изображения в ячейках, и у меня есть реализация ILabelProvider, которая знает, как получить изображение для конкретного состояния объекта во время выполнения. Поэтому я звоню ILabelProvider.getImage(element) от ColumnLabelProvider.Иконки в ячейках NatTable

В NatTable Я знаю способ добавления изображения путем регистрации configAttribute против configLabel. А для configAttribute я должен явно указать, какое изображение использовать. Разумеется, я могу создать ярлык для каждого состояния, зарегистрировать изображение для каждой метки и использовать ConfigLabelAccumulator, чтобы связать все это. Но количество изображений довольно велико, и более того, я не хочу дублировать эту логику. Так есть ли более подходящий способ для такого случая? Просто делегирование существующим ILabelProvider?

+0

См. Https://www.eclipse.org/forums/index.php/t/491100/ –

ответ

2

В случае, когда у вас довольно динамичная для извлечения Image, решение для ярлыков недостаточно (например, когда вы думаете о системе магазина с разными изображениями на объект строки). В таких случаях вы обычно реализуете пользовательский ImagePainter и реализуете код, определяющий Image для использования в методе getImage().

Следующий фрагмент может использоваться в качестве отправной точки, где вам нужно только реализовать свою собственную логику для определения используемого Image. Таким образом вам нужно зарегистрировать только ImagePainter. В NatTable это также делается для некоторых статических изображений, например, 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; 
    } 
} 
Смежные вопросы