0

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

在 NatTable 中,我知道通过针对 configLabel 注册 configAttribute 来添加图像的方法。对于 configAttribute 我应该明确地告诉使用什么图像。当然,我可以为每个状态创建标签,为每个标签注册图像并使用 ConfigLabelAccumulator 将它们捆绑在一起。但是图像的数量非常庞大,而且我不想重复这个逻辑。那么对于这种情况有更合适的方法吗?只是委托给现有的ILabelProvider

4

1 回答 1

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;
    }
}
于 2016-05-04T06:54:45.520 回答