两个问题:

1)如何在NatTable单元格中插入两个文本(每个字体不同)和一个图像?

2)如何设置边距如下图?

在以下情况下:

a)使用Java 1.6(无RichTexCellEditor,无CSS)。
b)使用Java 1.7(使用RichTexCellEditor,没有CSS)。
c)使用Java 1.8(带有RichTexCellEditor和CSS)。




提前非常感谢您。

最佳答案

NatTable的样式基于[1]中所述的样式和画家。有关NatTable配置和NatTable入门的更多信息,请参阅我们的入门教程[2]。
要创建类似要求的组合,需要注册ICellPainter的组合。
要在单元格边框和内容之间添加填充(而非边距),请使用PaddingDecorator
要为文本添加其他图像,请使用以文字为基础的CellPainterDecorator和装饰器为ImagePainterRichTextCellPainter
NatTable Nebula Extension的ICellPainter仅支持呈现不同字体的文本。那需要Java 1.7。
NatTable中的CSS样式用于通过CSS创建样式配置。尽管如此,没有其他支持。 CSS支持包含在需要Java 1.8的NatTable E4扩展中。在1.4新增和值得注意的页面[3]中提供了说明。


因此,a)的答案是:NatTable Core不支持使用两种不同字体的文本呈现,因此您需要实现一个自定义ColumnLabelAccumulator来支持该字体。

b)的答案是创建一个复杂的画家并像这样注册它:

configRegistry.registerConfigAttribute(
    CellConfigAttributes.CELL_PAINTER,
    new BackgroundPainter(
            new PaddingDecorator(
                    new CellPainterDecorator(
                            new PaddingDecorator(new RichTextCellPainter(), 10, 0, 0, 0),
                            CellEdgeEnum.LEFT,
                            new ImagePainter()),
                    2, 5, 2, 5)),
    DisplayMode.NORMAL,
    ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 0);


上面的示例暗示有CellStyleAttributes.IMAGE应用的列标签,并且仅应将画家配置为第一列。另请注意,该具体单元格的样式需要设置属性ImagePainter,然后由CellPainterFactory呈现该属性。如果图像是固定的,则需要将其设置为构造函数参数。

当然,内容需要包含必要的HTML标记以呈现不同的字体。就像是:

<p><strong><span style="font-size:14px">This is a test</span></strong></p>
<p><span style="color:rgb(128, 128, 128)"><span style="font-size:12px">This is a test</span></span></p>


c)的答案不是那么简单。首先,上面显示的复杂的画家结构无法使用CSS来完成。原因是需要配置多个填充,这是NatTable CSS不支持的。
其次,E4扩展不知道RichTextPainter。因此,需要手动将其注册到,例如

CellPainterFactory.getInstance().registerContentPainter(
    "richtext",
    (painterProperties, underlying) -> {
        return new RichTextCellPainter();
    });


需要以某种方式考虑其他属性的处理。

在CSS中,它看起来像这样:

painter: background padding decorator richtext;
decoration: left url('./nebula_logo_16.png') 5 true;
padding: 2 5;


[1] https://www.eclipse.org/nattable/documentation.php?page=styling
[2] http://www.vogella.com/tutorials/NatTable/article.html
[3] https://www.eclipse.org/nattable/nandn/nandn_140.php

08-04 23:00