Modificar colunas de AbstractTableModel em tempo de execução

Possuo uma classe de pesquisa que permite adicionar e remover campos da JTable em tempo de execução.

Segue o código

private void inicializarConfiguracoes(List configuracoes) {
start = 0;

  List<String> tamanhos = new ArrayList<>();
  pesquisaTableModel = new PesquisaTableModel<>(configuracoes);
  tabela = new JTable(pesquisaTableModel);
  configuracoes.forEach(x -> tamanhos.add(x.getConTamanho()));
  List<TamanhoVO> tamanhoVOs = TamanhoUtil.converterTamanho(707, tamanhos);
  for (int i = 0; i < pesquisaTableModel.getColumnCount(); i++) {
  	if (tamanhoVOs.size() > i) {
  		tabela.getColumnModel().getColumn(i).setPreferredWidth(tamanhoVOs.get(i).getTamanhoReal().intValue());
  	}
  }
  carregarCombo(configuracoes);
  carregarTabela();
  tabela.repaint();

}

Classe AbstracttableModel

package br.com.Pesquisa.tablePlugins;

import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;
import javax.swing.table.AbstractTableModel;

import br.com.Conexao.DAO.ConfiguracaoPesquisaDAO;
import br.com.Conexao.model.ConfiguracaoPesquisa;
import br.com.Pesquisa.VO.TipoFormatoVO;
import br.com.Pesquisa.util.TipoTamanhoEnum;
import br.com.Pesquisa.util.ValoresEnum;
import br.com.Util.StringUtil;

public class ConfiguracaoTableModel extends AbstractTableModel {

private static final long serialVersionUID = 1L;
private List rows = new ArrayList<>();
private List configuracoesPesquisa = new ArrayList<>();
ConfiguracaoPesquisaDAO configuracaoPesquisaDAO = new ConfiguracaoPesquisaDAO();

public ConfiguracaoTableModel(List rows) {
super();
this.rows = rows;
configuracoesPesquisa.add(“DESCRIÇÃO”);
configuracoesPesquisa.add(“CAMPO”);
configuracoesPesquisa.add(“FORMATO”);
configuracoesPesquisa.add(“TAMANHO”);
}

@Override
public int getColumnCount() {
return configuracoesPesquisa.size();
}

@Override
public String getColumnName(int column) {
return configuracoesPesquisa.get(column);
}

@Override
public int getRowCount() {
return rows.size();
}

@Override
public Class<?> getColumnClass(int columnIndex) {
return String.class;
}

@Override
public void setValueAt(Object aValue, int row, int column) {
if (column == 2) {
ConfiguracaoPesquisa configuracaoPesquisa = rows.get(row);
configuracaoPesquisa.setConFormato(aValue == null ? null : ((TipoFormatoVO) aValue).getFormato());
configuracaoPesquisaDAO.salvar(configuracaoPesquisa);
}
if (column == 3) {
if (!(aValue.toString().contains(TipoTamanhoEnum.FIXO.getValues()) || aValue.toString().contains(TipoTamanhoEnum.VARIAVEL.getValues()))) {
JOptionPane.showMessageDialog(null, “TIPO DE TAMANHO INVÁLIDO”, “VALIDAÇÃO”, JOptionPane.ERROR_MESSAGE);
} else {
if (!StringUtil.isNumeric(aValue.toString())) {
JOptionPane.showMessageDialog(null, “INSIRA UM VALOR NUMÉRICO”, “VALIDAÇÃO”, JOptionPane.ERROR_MESSAGE);
} else {
ConfiguracaoPesquisa configuracaoPesquisa = rows.get(row);
configuracaoPesquisa.setConTamanho(aValue.toString());
configuracaoPesquisaDAO.salvar(configuracaoPesquisa);
}
}
}
}

@Override
public boolean isCellEditable(int row, int column) {
if (column == 2) {
ConfiguracaoPesquisa configuracaoPesquisa = rows.get(row);
return !ValoresEnum.listarValoresPorTipo(configuracaoPesquisa.getConTipo()).isEmpty();
}
if (column == 3) {
return Boolean.TRUE;
}
return Boolean.FALSE;
}

@Override
public Object getValueAt(int row, int column) {
ConfiguracaoPesquisa configuracaoPesquisa = rows.get(row);
if (column == 0) {
return configuracaoPesquisa.getConDescricao();
}
if (column == 1) {
return configuracaoPesquisa.getConField();
}
if (column == 2) {
return new TipoFormatoVO(configuracaoPesquisa.getConTipo(), configuracaoPesquisa.getConFormato());
}
if (column == 3) {
return String.valueOf(configuracaoPesquisa.getConTamanho());
}
return null;
}

public ConfiguracaoPesquisa getRow(int selectedRow) {
return rows.get(selectedRow);
}

public void remove(int selectedRow) {
rows.remove(selectedRow);
fireTableDataChanged();
}

public List getRows() {
return rows;
}

public void setRows(List rows) {
this.rows = rows;
fireTableDataChanged();
}

}

porem não está revalidando e recriando as novas configuraçoes