@Override
  public @NotNull Component prepareRenderer(@NotNull TableCellRenderer renderer, int row, int column) {
    Component result = super.prepareRenderer(renderer, row, column);

    if (result instanceof JComponent component && !isCellSelected(row, column)) {
      if (isStriped()) {
        if (isTableDecorationSupported()) {
          setRendererBackground(component, row % 2 == 1 ? getBackground() : ObjectUtils.chooseNotNull(getStripeColor(), getBackground()));
        }
      }
      else {
        Color hovered = isHoverPaintingDisabled(this) || isHoverPaintingDisabled(component) ? null : getHoveredRowBackground();
        if (hovered != null) {
          if (row == TableHoverListener.getHoveredRow(this)) {
            setRendererBackground(component, hovered);
          }
          else {
            forEachComponent(component, child -> {
              // reset hovered background only if it was not cleared properly
              if (hovered == child.getBackground()) child.setBackground(getBackground());
            });
          }
        }
      }
    }

    if (myExpandableItemsHandler.getExpandedItems().contains(new TableCell(row, column))) {
      result = ExpandedItemRendererComponentWrapper.wrap(result);
    }

    if (renderer instanceof JCheckBox) {
      ((JCheckBox)renderer).getModel().setRollover(rollOverCell != null && rollOverCell.at(row, column));
    }
    return result;
  }
@Override
  public @NotNull Component prepareRenderer(@NotNull TableCellRenderer renderer, int row, int column)