Adicionar valores em JTable (AbstractTableModel)

Olá pessoal,

Estou montando um tela que possui dois jTable, onde o primeiro terá os dados vindo da tabela produtos, ao selecionar uma linha e clicar em um botão Adicionar, mandará para a segunda tabela. Até ai funciona, entretanto, quando vou adicionar um segundo produto, o registro anterior tem os dados substituidos pelo ultimo dado inserido.
Alguém poderia me dar uma ajuda?
Segue abaixo o trecho que uso para adicionar:

        //Variaveis
        float nPreco = 0;
        //ProdTableModel objModel = new ProdTableModel(listaProd);
        
        //Retorna o objeto da linha selecionada
        objProd = objModel.get(objTBProd.getSelectedRow());                    
         
        objCons.setCodProd(objProd.getCodigo());
        objCons.setProduto(objProd.getDesc());
        objCons.setPrcVen(objProd.getPrcVen());
        
        //Motando a tabela de Consumo
        objTBCons.setModel(objModel2);
        
        System.out.print(objProd.getDesc());
        
        //Adicionando o dado da tabela de produto na tabela de Consumo
        objModel2.add(objCons);
        
        //Soma o preço dos produtos consumidos
        nPreco += objProd.getPrcVen();
        
        //Apresenta o total na label
        lblPreco.setText(String.valueOf(nPreco));

E aqui onde declaro meus models:

        //Insere a lista no JTable
        objTBProd.setModel(new ProdTableModel(listaProd));
        
        //Insere a lista no JTable
        objTBCons.setModel(new ConsTableModel(listaCons));
        
        objModel2 = new ConsTableModel(listaCons);              //Cria o model Consumo  
        
        objModel = new ProdTableModel(listaProd);

E esse é o método de adicionar:

public void add(Consumo consumo) {  
          
        this.listaCons.add(consumo);  
        this.fireTableDataChanged();
        
    } 

Agradeço desde já.

Onde está o new da variável objCons?

Outra coisa. Não seja preguiçoso, o fireTableDataChanged deve ser usado o mínimo possível. Use o método “fire” específico de adição fireTableRowsInserted.

public void add(Consumo consumo) { listaCons.add(consumo); fireTableRowsInserted(listaCons.size(), listaCons.size()); }

Assim, além de exigir menos processador, você não terá um comportamento inconsistente caso faça filtros ou ordenação.

Olá ViniGodoi.

Segue abaixo o inicio do fonte:

    //Variaveis
    ProdutoDAO  objProdDAO = new ProdutoDAO();
    GenericoDAO objGenDAO  = new GenericoDAO();
    UsuarioDAO  objUsuDAO  = new UsuarioDAO();
    TPrincipal  objPrinc   = new TPrincipal();
    Produto objProd        = new Produto();
    List<Produto> listaProd;
    List<Consumo> listaCons;
    Consumo objCons         =  new Consumo();                                  
    ConsTableModel objModel2;
    ProdTableModel objModel;
    
    public TConsumo() throws SQLException {
        initComponents();
        
        //Retorna a lista de produtos
        listaProd = objProdDAO.CarregaProd();
        
        //Retorna a lista de consumo
        listaCons = objUsuDAO.ConsumoUsuario();
        
        //Insere a lista no JTable
        objTBProd.setModel(new ProdTableModel(listaProd));
        
        //Insere a lista no JTable
        objTBCons.setModel(new ConsTableModel(listaCons));
        
        objModel2 = new ConsTableModel(listaCons);              //Cria o model Consumo  
        
        objModel = new ProdTableModel(listaProd);
        
        //Motando a tabela de Consumo
        objTBCons.setModel(objModel2);
    }

Agradeço desde já.

Assim você está criando um objeto só, e só alterando os dados dele toda vez que clica em adicionar. É o new que cria um novo objeto. Mova o new para dentro da função:

[code] //Variaveis
float nPreco = 0;
//ProdTableModel objModel = new ProdTableModel(listaProd);

    //Retorna o objeto da linha selecionada
    objProd = objModel.get(objTBProd.getSelectedRow());                    

    Consumo objCons         =  new Consumo(); 
    objCons.setCodProd(objProd.getCodigo());
    objCons.setProduto(objProd.getDesc());
    objCons.setPrcVen(objProd.getPrcVen());
    
    //Motando a tabela de Consumo
    objTBCons.setModel(objModel2);
    
    System.out.print(objProd.getDesc());
    
    //Adicionando o dado da tabela de produto na tabela de Consumo
    objModel2.add(objCons);
    
    //Soma o preço dos produtos consumidos
    nPreco += objProd.getPrcVen();
    
    //Apresenta o total na label
    lblPreco.setText(String.valueOf(nPreco));

[/code]

Aliás, o ideal até é que objCons seja uma variável local.