我正在用NatTable替换JFace TableViewer。在使用TableViewer的实现中,我在单元格中有图像,并且实现了ILabelProvider
,它实现了如何在运行时获取对象的具体状态的图像。所以我从ILabelProvider.getImage(element)
呼叫ColumnLabelProvider
。
在NatTable中,我知道通过针对configLabel的registring configAttribute添加图像的方法。对于configAttribute,我应该明确告诉要使用的图像。当然,我可以为每个状态创建标签,为每个标签注册图像,并使用ConfigLabelAccumulator将其全部捆绑在一起。但是图像的数量非常大,而且我不想重复这种逻辑。那么在这种情况下是否有更合适的方法?只是委托给现有的ILabelProvider
?
最佳答案
如果您有相当大的动态来检索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;
}
}