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.