0

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

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

有人可以帮我吗?

谢谢并恭祝安康,

普拉季姆纳

4

2 回答 2

0

有一个解决方案。我必须编写一个自定义的 checkboxpainter(从可用的 OOTB 继承)并覆盖它的 getImage 方法以为适当的单元格返回 null

于 2013-08-28T08:17:59.973 回答
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);            
      }
    }
  }
}
于 2014-11-12T08:15:19.503 回答