Checkbox NatTable-仅当可编辑时才需要复选框

Checkbox NatTable-仅当可编辑时才需要复选框,checkbox,nattable,Checkbox,Nattable,我是个新手。我已经仔细阅读了NatTable示例及其源代码,但没有找到解决问题的方法。 在NatTable中,我有一个列,该列应根据另一列的值提供一个复选框供选择。 我使用过Checkboxpainter、checkboxcelleditor、defaultbooleanconverter和IEditableRule。无论单元格是否可编辑,这都会呈现一个复选框,尽管它允许我仅在启用复选框时标记该复选框 但是,根据我们的要求,如果行不可选择,用户不应看到复选框。或者在最坏的情况下,应为不可选择的行

我是个新手。我已经仔细阅读了NatTable示例及其源代码,但没有找到解决问题的方法。 在NatTable中,我有一个列,该列应根据另一列的值提供一个复选框供选择。 我使用过Checkboxpainter、checkboxcelleditor、defaultbooleanconverter和IEditableRule。无论单元格是否可编辑,这都会呈现一个复选框,尽管它允许我仅在启用复选框时标记该复选框

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

有人能帮我吗

感谢和问候

Pradyumna找到了解决办法。
我必须编写一个定制的checkboxpainter(从可用的OOTB继承)并重写其getImage方法,以便为适当的单元格返回null

有一个更好的解决方案,我刚刚在我的工作中应用于类似的情况

我通过向表中添加以下配置完成了此操作:

// 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\u LABEL\u复选框,为空单元格引入了配置标签CONFIG\u LABEL\u 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);            
      }
    }
  }
}