Boa noite,
Pessoal, criei um AbstractTableModel no qual possui um ArrayList que corresponde as linhas da minha JTable, então quando adiciono a primeira linha ele aparece lá bonitinho na visão, mas quando adiciono da segunda linha em diante ele adiciona a nova linha, mas infelizmente atualiza todo o restante das linhas anteriores para valor da última linha que acabei inserir. Eu já debuguei o projeto e no Arraylist de fato não fica valor duplicado, é apenas a exibição da JTable que fica com esse problema.
Exemplo:
A primeira vez inseri o usuário MARCELO e apareceu lá na tabela normal.
A segunda fez inseri o usuário JOÃO no qual inseriu uma nova linha, mas também sobrescreveu o usuário MARCELO para JOÃO, ou seja, ficou dois JOÃO. E se eu adicionar um terceiro usuário ele insere uma nova linha com o novo usuário, mas sobrescreve todos os anteriores para o último usuário inserido e assim sucessivamente nas inserções posteriores.
public class TableModelUsuario extends AbstractTableModel {
private List<Usuario> listaUsuarios;
private List<String> colunas;
public TableModelUsuario(List<Usuario> usuarios) {
listaUsuarios = new ArrayList<Usuario>(usuarios);
colunas = Arrays.asList("NOME", "LOGIN", "PERFIL");
}
public String getColumnName(int coluna) {
return colunas.get(coluna);
}
@Override
public int getRowCount() {
return listaUsuarios.size();
}
@Override
public int getColumnCount() {
return colunas.size();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
switch (columnIndex) {
case 0:
return listaUsuarios.get(rowIndex).getNome();
case 1:
return listaUsuarios.get(rowIndex).getLogin();
case 2:
return listaUsuarios.get(rowIndex).getPerfil();
}
return null;
}
public void setValueAt(Usuario usuario, int rowIndex, int columnIndex) {
switch (columnIndex) {
case 0:
listaUsuarios.get(rowIndex).setNome(usuario.getNome());
case 1:
listaUsuarios.get(rowIndex).setLogin(usuario.getLogin());
case 2:
listaUsuarios.get(rowIndex).setPerfil(usuario.getPerfil());
}
this.fireTableDataChanged();
}
public Usuario getUsuario(int i) {
return listaUsuarios.get(i);
}
public List<Usuario> getUsuarios() {
return listaUsuarios;
}
public void adicionarUm(Usuario usuario) {
listaUsuarios.add(usuario);
fireTableRowsInserted(listaUsuarios.size(), listaUsuarios.size());
}
}