NatTable - 仅在可编辑时需要复选框

时间:2013-08-27 11:56:37

标签: checkbox nattable

我是NatTable的新手。我已经完成了NatTable示例及其源代码,但我没有得到解决我的一个问题的方法。 在NatTable中,我有一个列应该提供一个复选框供选择,具体取决于另一列的值。 我使用了Checkboxpainter,checkboxcelleditor,defaultbooleanconverter和IEditableRule。这会呈现一个复选框,无论该单元格是否可编辑,但只有在启用时才允许我标记该复选框。

但是,根据我们的要求,如果行不可选,则用户不应看到该复选框。或者在最坏的情况下,应该为不可选择的行呈现disabledcheckbox。

有人可以帮帮我吗?

谢谢和问候,

Pradyumna

2 个答案:

答案 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);            
      }
    }
  }
}