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”); }
<a class="mention" href="/u/override">@Override</a> public int getColumnCount() { return configuracoesPesquisa.size(); }
<a class="mention" href="/u/override">@Override</a> public String getColumnName(int column) { return configuracoesPesquisa.get(column); }
<a class="mention" href="/u/override">@Override</a> public int getRowCount() { return rows.size(); }
<a class="mention" href="/u/override">@Override</a> public Class<?> getColumnClass(int columnIndex) { return String.class; }
<a class="mention" href="/u/override">@Override</a> 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); } } } }
<a class="mention" href="/u/override">@Override</a> 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; }
<a class="mention" href="/u/override">@Override</a> 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