Bom dia galera, já sou programador a algum tempo mais uma questão do Jtable vem me tirando a paciência, alguém sabe como acumular item na mesma linha. Abaixo tem um bom exemplo
O item 10117 e 10126 e outros, deveriam somar e não repetir
Exemplo:
COD - PRODUTO QTDE
10117 - GRACE LA ROSE SUBLIME - 3
A ideia é simples!
Antes de adicionar um item na JTable, basta percorre-la procurando se o ID do produto em questão já existe, caso exista some a quantidade, caso contrário insira uma nova linha.
D
Daniel95
Esses dados vem de uma Query? Vem de onde?
Se for de uma Query um group by e sum deve resolver isso.
J
jallisson_jallis
Os dados da tabela são inseridos conforme o codigo abaixo:
Pelo o que eu entendi a table destes ItensVenda neste momento não tem relação com o Database correto? Não dá pra fazer um “Select * from” pra ir populando ela, você está adicionando um a um os Itens pra depois persistir no banco né?
Se for o caso, realmente acho que um workaround pra fazer isso funcionar seria de na hora de adicionar um Item na JTable verificar na List do TableModel se o Item inserido já existe, se sim faz um incremento no atributo quantidade do item já existente (não sei se isso tem um impacto no flow do seu código posteriormente, se você conta os itens da tabela pra inserir, etc) e senão adiciona da mesma forma que está fazendo.
J
jallisson_jallis
Isso mesmo @Daniel95 a query não manda nessa questão de popular minha tabela, tentarei implementar sua idéia
D
Daniel95
Você pode pegar aquela List dos Itens pra comparar se o item já contém na List com o método contains(Object o) de List, ele vai chamar o equals do objeto Item, você pode sobrescrever o método equals dele pra retornar true quando eles tem o mesmo atributo código por exemplo no seu caso, então se na hora de adicionar o contains retornar true você pode pegar este objeto da List e alterar o atributo quantidade dele incrementando em 1 e não adicionando ele novamente na List.
if (itensVenda.contains(item)){
int index = itensVenda.indexOf(item);
item = itensVenda.get(index);
item.setQtde(item.getQtde() + 1);
}
No caso o atributo código está na classe Produto e não Item, já que a List é de Item sobrescrevendo o equals de Produto para retornar true quando tiverem o mesmo código de produto e o equals de Item para retornar true quando tiverem o mesmo Produto (Já foi sobrescrito o equals) deve resolver.
Assim um Item será considerado igual ao outro quando tem o mesmo código de Produto.