我是NatTable的新手。我已经完成了NatTable示例及其源代码,但我没有得到解决我的一个问题的方法。 在NatTable中,我有一个列应该提供一个复选框供选择,具体取决于另一列的值。 我使用了Checkboxpainter,checkboxcelleditor,defaultbooleanconverter和IEditableRule。这会呈现一个复选框,无论该单元格是否可编辑,但只有在启用时才允许我标记该复选框。
但是,根据我们的要求,如果行不可选,则用户不应看到该复选框。或者在最坏的情况下,应该为不可选择的行呈现disabledcheckbox。
有人可以帮帮我吗?
谢谢和问候,
Pradyumna
答案 0 :(得分:0)
得到了解决方案。 我必须编写一个自定义的checkboxpainter(继承自可用的OOTB)并覆盖其getImage方法,以便为适当的单元格返回null
答案 1 :(得分:0)
有一个更好的解决方案,我刚刚在我的工作中应用于类似的案例。
我是通过在表格中添加以下配置来实现的:
// make checkbox cells editable
configRegistry.registerConfigAttribute(EditConfigAttributes.CELL_EDITABLE_RULE, IEditableRule.ALWAYS_EDITABLE, DisplayMode.EDIT, CONFIG_LABEL_CHECKBOX);
// register the checkbox editor for DisplayMode.EDIT
configRegistry.registerConfigAttribute(EditConfigAttributes.CELL_EDITOR, new CheckBoxCellEditor(), DisplayMode.EDIT, CONFIG_LABEL_CHECKBOX);
// register the checkbox painter for DisplayMode.NORMAL
configRegistry.registerConfigAttribute(CellConfigAttributes.CELL_PAINTER, new CheckBoxPainter(), DisplayMode.NORMAL, CONFIG_LABEL_CHECKBOX);
// register the painter for empty cells in DisplayMode.NORMAL
configRegistry.registerConfigAttribute(CellConfigAttributes.CELL_PAINTER, new BackgroundPainter(), DisplayMode.NORMAL, CONFIG_LABEL_EMPTY);
基本上,这会为可编辑复选框引入配置标签CONFIG_LABEL_CHECKBOX,为空单元格引入CONFIG_LABEL_EMPTY。
现在,您所要做的就是将IConfigLabelAccumulator
附加到bodyDataLayer
:
bodyDataLayer.setConfigLabelAccumulator(new IConfigLabelAccumulator()
{
public void accumulateConfigLabels(LabelStack configLabels, int columnPosition, int rowPosition)
{
if(columnPosition == CHECKBOX_COLUMN_INDEX)
{
if(someCodeToCheckIfRowIsEditable(rowPosition))
{
configLabels.add(CONFIG_LABEL_CHECKBOX);
}
else
{
configLabels.add(CONFIG_LABEL_EMPTY);
}
}
}
}