NatTable 单元格中的图标
Icons in NatTable cells
我正在用 NatTable 替换 JFace TableViewer。在我使用 TableViewer 的实现中,我在单元格中有图像,并且我有 ILabelProvider
的实现,它知道如何在运行时为对象的具体状态获取图像。所以我从 ColumnLabelProvider
调用 ILabelProvider.getImage(element)
。
在 NatTable 中,我知道通过针对 configLabel 的注册字符串 configAttribute 添加图像的方法。对于 configAttribute,我应该明确说明要使用的图像。当然,我可以为每个状态创建标签,为每个标签注册图像,然后使用 ConfigLabelAccumulator 将它们连接在一起。但是图片量很大,而且我也不想重复这个逻辑。那么对于这种情况有没有更合适的方式呢?仅委派给现有 ILabelProvider
?
如果您有相当多的动态来检索 Image
标签解决方案是不够的(例如,当考虑每行对象具有不同图像的商店系统时)。在这种情况下,您通常会实施自定义 ImagePainter
并实施确定要在 getImage()
方法中使用的 Image
的代码。
以下代码段可用作起点,您只需实施自定义逻辑即可确定要使用的 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;
}
}
我正在用 NatTable 替换 JFace TableViewer。在我使用 TableViewer 的实现中,我在单元格中有图像,并且我有 ILabelProvider
的实现,它知道如何在运行时为对象的具体状态获取图像。所以我从 ColumnLabelProvider
调用 ILabelProvider.getImage(element)
。
在 NatTable 中,我知道通过针对 configLabel 的注册字符串 configAttribute 添加图像的方法。对于 configAttribute,我应该明确说明要使用的图像。当然,我可以为每个状态创建标签,为每个标签注册图像,然后使用 ConfigLabelAccumulator 将它们连接在一起。但是图片量很大,而且我也不想重复这个逻辑。那么对于这种情况有没有更合适的方式呢?仅委派给现有 ILabelProvider
?
如果您有相当多的动态来检索 Image
标签解决方案是不够的(例如,当考虑每行对象具有不同图像的商店系统时)。在这种情况下,您通常会实施自定义 ImagePainter
并实施确定要在 getImage()
方法中使用的 Image
的代码。
以下代码段可用作起点,您只需实施自定义逻辑即可确定要使用的 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;
}
}