NatTable单元格中的图标

时间:2016-05-03 16:20:37

标签: java swt jface nebula nattable

我正在用NatTable替换JFace TableViewer。在我使用TableViewer的实现中,我在单元格中有图像,并且我有ILabelProvider的实现,它知道如何在运行时获取对象的具体状态的图像。所以我从ILabelProvider.getImage(element)致电ColumnLabelProvider

在NatTable中我知道通过registring configAttribute对configLabel添加图像的方法。对于configAttribute,我应该明确告诉使用什么图像。当然,我可以为每个州创建标签,为每个标签注册图像,并使用ConfigLabelAccumulator将其全部绑定。但是图像量非常大,而且我不想复制这种逻辑。那么这种情况有更合适的方法吗?只委托现有的ILabelProvider

1 个答案:

答案 0 :(得分: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;
    }
}