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