Inserção de um mesmo objeto em jTables diferentes

6 respostas
M

Olá pessoal,

Estou trabalhando em um aplicação que preciso fazer lançamentos de faturas ao longo do mês. Estes lançamentos vão sendo guardados num JTable, e conforme vão sendo inseridos lançamentos de uma mesma seguradora, ele deve “resumir” isso, ou seja, juntar os lançamentos iguais e somar seus valores! O que acontece é que tenho um table para todos os lançamentos e outra para os resumidos.
Minha lógica está assim:

Botao adicionar:

private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) { if (dia.getText().isEmpty() || seguradora.getSelectedIndex() == 0 || comissao.getText().isEmpty() || banco.getText().isEmpty()) { JOptionPane.showMessageDialog(this, "Os campos marcados com * sao obrigatorios!", "Atencao", JOptionPane.WARNING_MESSAGE); } else { codigo++; Lancamento ob = new Lancamento(); ob.setIdlanc(codigo); ob.setDia(dia.getText()); ob.setSeguradora(seguradora.getSelectedItem().toString()); ob.setComissao(comissao.getText()); ob.setIrrf(irrf.getText()); ob.setBanco(banco.getText()); inserirLancamentos(ob);//Insere na tabela de lancamentos inserirResumidos(ob);//Insere na tabela Resumidos ajustarColunas(); limparCampos(); dia.requestFocus(); } }

O problema é que depois que ele verifica se o lancamento ja existe e junta com o existente, ele coloca esse objeto “Ob”, na tabela Lancamentos tbm! Estou usando modelos que eu mesmo fiz em ambas tabelas, nenhum objeto destes é static! O que pode estar acontecendo?
Obs.: não sei se fui claro

6 Respostas

diego.sas

mt_thesame:
Olá pessoal,

Estou trabalhando em um aplicação que preciso fazer lançamentos de faturas ao longo do mês. Estes lançamentos vão sendo guardados num JTable, e conforme vão sendo inseridos lançamentos de uma mesma seguradora, ele deve “resumir” isso, ou seja, juntar os lançamentos iguais e somar seus valores! O que acontece é que tenho um table para todos os lançamentos e outra para os resumidos.
Minha lógica está assim:

Botao adicionar:

private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) { if (dia.getText().isEmpty() || seguradora.getSelectedIndex() == 0 || comissao.getText().isEmpty() || banco.getText().isEmpty()) { JOptionPane.showMessageDialog(this, "Os campos marcados com * sao obrigatorios!", "Atencao", JOptionPane.WARNING_MESSAGE); } else { codigo++; Lancamento ob = new Lancamento(); ob.setIdlanc(codigo); ob.setDia(dia.getText()); ob.setSeguradora(seguradora.getSelectedItem().toString()); ob.setComissao(comissao.getText()); ob.setIrrf(irrf.getText()); ob.setBanco(banco.getText()); inserirLancamentos(ob);//Insere na tabela de lancamentos inserirResumidos(ob);//Insere na tabela Resumidos ajustarColunas(); limparCampos(); dia.requestFocus(); } }

O problema é que depois que ele verifica se o lancamento ja existe e junta com o existente, ele coloca esse objeto “Ob”, na tabela Lancamentos tbm! Estou usando modelos que eu mesmo fiz em ambas tabelas, nenhum objeto destes é static! O que pode estar acontecendo?
Obs.: não sei se fui claro

Bom dia, em que momento você faz a verficação se o lançamento existe?

M

Diego, valew pela resposta!
Faço na hora de inserir o objeto no modelo da tabela Resumidos:

public void addRow(Lancamento l) { boolean resumiu = false; System.out.println("Resum: "+l.getSeguradora()+" - "+l.getBanco()); for (int i = 0; i < this.resum.size(); i++) { if (l.getSeguradora().equals(this.resum.get(i).getSeguradora())) { l.setComissao(l.getComissao() + this.resum.get(i).getComissao()); l.setIrrf(l.getIrrf() + this.resum.get(i).getIrrf()); l.setBanco(l.getBanco() + this.resum.get(i).getBanco()); this.resum.set(i, l); resumiu = true; break; } } System.out.println("Resum: "+l.getSeguradora()+" - "+l.getBanco()); if (!resumiu) { this.resum.add(l); int linha = resum.size() - 1; fireTableRowsInserted(linha, linha); } }
O que esta me deixando loco, é que cada JTable usa seu proprio Model, não era pra isso acontecer! E verifico no modelo de resumidos, como que o Modelo de Lancamentos (que é outro model), pega isso?? não dá pra entender!!!

D

Você passa o mesmo objeto para a mesma classe que faz a mesma verificação no mesmo objeto passado. Cria 2 métodos distintos para cada ação. Aí sim irá salvar da forma que você quer.

M

Na verdade, eu já fiz isso! Olha la no botão onde add nas tabelas, que eu crio o objeto, adiciono o conteudo nele e passo para os métodos responsáveis em adicionar no modelo, que sao estes:

inserirLancamentos(ob);//Insere na tabela de lancamentos
inserirResumidos(ob);//Insere na tabela Resumidos

ai no modelo de lancamentos, apenas adiciono no ArrayList, e no modelo de resumidos, faço a verificação antes de adicionar!

D

Na verdade, eu já fiz isso! Olha la no botão onde add nas tabelas, que eu crio o objeto, adiciono o conteudo nele e passo para os métodos responsáveis em adicionar no modelo, que sao estes:

inserirLancamentos(ob);//Insere na tabela de lancamentos
inserirResumidos(ob);//Insere na tabela Resumidos

ai no modelo de lancamentos, apenas adiciono no ArrayList, e no modelo de resumidos, faço a verificação antes de adicionar!

posta esses 2 métodos aí também, para dar uma olhada.

M
private void inserirLancamentos(Lancamento ob) {
        lcr.lm.addRow(ob);//"lcr" é um objeto de uma classe que está controlando os dados, como se fosse um CRUD
        tLanc.setModel(lcr.lm);
    }

    private void inserirResumidos(Lancamento ob) {
        lcr.rm.addRow(ob);
        tResum.setModel(lcr.rm);
    }

Eu estava fazendo isso dentro do botao, resolvi separar assim, pq pensei que fosse este o problema!

Criado 9 de dezembro de 2011
Ultima resposta 9 de dez. de 2011
Respostas 6
Participantes 3