【问题标题】:Icons in NatTable cellsNatTable 单元格中的图标
【发布时间】:2016-08-28 19:19:56
【问题描述】:

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

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

【问题讨论】:

标签: java swt jface nebula nattable


【解决方案1】:

如果您有相当多的动态来检索Image,则标签解决方案是不充分的(例如,在考虑每行对象具有不同图像的商店系统时)。在这种情况下,您通常会实现自定义 ImagePainter 并实现代码来确定要在 getImage() 方法中使用的 Image

下面的sn-p可以作为一个起点,你只需要实现你的自定义逻辑来确定要使用的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-04-19
    • 2021-02-07
    • 2018-09-23
    • 2018-03-21
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 2021-12-19
    • 2020-05-03
    相关资源
    最近更新 更多