ArrayList salva apenas o ultimo dado

Tenho um ArayList do tipo Pessoas(codigo abaixo), porem quando insiro um novo dado, ele salva o ultimo dado em cima de todos os dados restantes…
Como faço para resolver?

public class FrmCadastroCliente extends javax.swing.JFrame {

Pessoas pes1 = new Pessoas();
ArrayList pes = new ArrayList();
}

private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {
this.pes1.setCodigo(Integer.parseInt(txtCodigo.getText()));
this.pes1.setCpf(txtCpf.getText());
this.pes1.setCidade(txtCidade.getText());
this.pes1.setDataNasc(txtData.getText());
this.pes1.setEndereco(txtEndereco.getText());
this.pes1.setNome(txtNome.getText());
this.pes.add(pes1);

}

1 curtida

Remova a variável pessoa.

Chame ela dentro do método.

private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {
    Pessoas pes1 = new Pessoas();
...

Imagine que o array guarda a referência do local onde o objeto está e não o objeto em si, se você adiciona sempre a mesma referência, vai ocupar todas as posições do array com a mesma informação.
Ao chamar o objeto pes1 dentro do método o escopo da variável fica restrita ao método e assim quando o método for chamado novamente irá gerar outro endereço de memória para a variável pes1, impedindo que adicione sempre a mesma informação.
Resumo: altere o escopo da variável ou adicione o objeto diretamente dentro do array.
Ex.:
this.pes.add(new pessoa(cod, cpf, cidade, data, endereco, nome));

1 curtida

poxa valeu, realmente era um erro bobo, bastava instanciar o obejeto pessoa dentro do metodo btnSalvar, obrigado pela ajuda.