NatTable - флажок нужен только при редактировании

Я новичок в NatTable. Я тщательно изучил примеры NatTable и его исходный код, но не нашел решения одной из своих проблем. В NatTable у меня есть столбец, который должен предоставить флажок для выбора в зависимости от значения другого столбца. Я использовал Checkboxpainter, checkboxcelleditor, defaultbooleanconverter и IEditableRule. Это отображает флажок независимо от того, доступна ли ячейка для редактирования или нет, хотя это позволяет мне отмечать флажок, только если он включен.

Однако согласно нашему требованию пользователь не должен видеть флажок, если строка недоступна для выбора. или, в худшем случае, для строк, которые нельзя выбрать, должен отображаться disabledcheckbox.

Может кто-нибудь, пожалуйста, помогите мне?

Спасибо и привет,

Прадьюмна


person praddyB    schedule 27.08.2013    source источник


Ответы (2)


Получил решение для этого. Мне пришлось написать собственный checkboxpainter (наследующий от того, который доступен OOTB) и переопределить его метод getImage, чтобы он возвращал значение null для соответствующих ячеек.

person praddyB    schedule 28.08.2013

Есть лучшее решение, которое я только что применил к аналогичному случаю в своей работе.

Я сделал это, добавив в таблицу следующую конфигурацию:

// 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);            
      }
    }
  }
}
person Stefan Winkler    schedule 12.11.2014