两个问题:
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
和装饰器为ImagePainter
的RichTextCellPainter
。
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