Toda vez que insiro um novo objeto na jtable , esse objeto é duplicado ! , alguem pode me ajudar ?
Posta seus códigos fontes.
Dica: Você não deveria adicionar nada na JTable
, deveria simplesmente utilizar o TableModel
para renderizar uma coleção de objetos.
public class TablePessoa extends AbstractTableModel {
private List<Pessoa> listaDePessoas = new ArrayList<>();
private String[] coluna = {"Nome", "Sobrenome", "Telefone", "Tipo"};
public void adicionarPessoa(Pessoa pessoa) {
this.listaDePessoas.add(pessoaToUpperCase(pessoa));
fireTableDataChanged();
}
public void editarPessoa(Pessoa pessoa, int rowIndex) {
this.listaDePessoas.set(rowIndex, pessoa);
fireTableDataChanged();
}
public void excluirPessoa(int rowIndex) {
this.listaDePessoas.remove(rowIndex);
fireTableDataChanged();
}
public Pessoa getPessoa(int rowIndex) {
return this.listaDePessoas.get(rowIndex);
}
public Pessoa pessoaToUpperCase(Pessoa pessoa) {
pessoa.setNome(pessoa.getNome().toUpperCase());
pessoa.setSobrenome(pessoa.getSobrenome().toUpperCase());
pessoa.setTipo(pessoa.getTipo().toUpperCase());
return pessoa;
}
public boolean validarPessoa(Pessoa pessoa) {
if (StringHelper.isEmpty(pessoa.getNome())) {
return true;
}
if (StringHelper.isEmpty(pessoa.getSobrenome())) {
return true;
}
pessoa.setNome(StringHelper.replaceAllSpecialCharacters(pessoa.getNome()));
pessoa.setNome(StringHelper.spaceRemover(pessoa.getNome()));
pessoa.setSobrenome(StringHelper.replaceAllSpecialCharacters(pessoa.getSobrenome()));
pessoa.setSobrenome(StringHelper.spaceRemover(pessoa.getSobrenome()));
return false;
}
@Override
public int getRowCount() {
return this.listaDePessoas.size();
}
@Override
public int getColumnCount() {
return this.coluna.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
switch (columnIndex) {
case 0:
return this.listaDePessoas.get(rowIndex).getNome();
case 1:
return this.listaDePessoas.get(rowIndex).getSobrenome();
case 2:
return this.listaDePessoas.get(rowIndex).getTelefone();
case 3:
return this.listaDePessoas.get(rowIndex).getTipo();
default:
return this.listaDePessoas.get(rowIndex);
}
}
@Override
public String getColumnName(int columnIndex) {
return this.coluna[columnIndex];
}
}
Amigo, imagino que sua Abstract table model seja a que esta em anexo a uma pergunta no tópico anterior a esse… sendo assim tenho um chute do que pode estar acontecendo com vc…
Existem duas camadas na sua tabela, a view e o model, o model é representado pelo seu AbstractTableModel, e a view é o objeto da tabela propriamente dita, eu chuto que você esta adicionando uma linha diretamente na view e outra no model… O que eu aconselho a fazer pra evitar isso é inserir um objeto na lista do abstract > limpar toda a tabela > adicionar tudo novamente