Somando dados de uma Coluna ( JTable )

10 respostas
marcos.menezes

Caros amigos,

Tenho uma tabela com 4 colunas (Nome, quantidade, valor Unitario, Subtotal).

A coluna Subtotal é (quantidade * valor Unitario).
Preciso buscar todos os subtotais de cada linha (4º coluna), somar essas informacoes e atribuilas a um JTextField.

Como faço para buscar coluna 4 da tabela.

Tentei usar o seguinte codigo sem sucesso.

for (i: getTable().getSelectedColumn()) table.getValueAt(i,4);

Alguem sabe como posso faze-lo?

10 Respostas

marcos.menezes

Pessoal,

No meu problema eu criei o seguinte metodo.

public Double calculaValorOrcamento() { double somaTotal = 0; for(int i=0; i<tabelaOrcamento.getColumnCount();i++ ) { Double vu = (Double)tabelaOrcamento.getValueAt(i, 4); somaTotal += vu.doubleValue(); } return somaTotal; }

No campo (JTextField) que eu quero que apareça o total eu declarei da seguinte forma.

public JTextField getTtotal() { if (ttotal == null) { ttotal = new JTextField(); ttotal.setBounds(new Rectangle(111, 230, 132, 18)); ttotal.setEditable(false); } return ttotal; }

A questão é, como que eu adiciono o metodo a esse campo.
Já tentei de tudo que eu conheço…

ttotal.setText(String.valueOf(somaTotal));(

Alguem pode ajudar?

berg.pb
ttotal.setText(String.valueOf(calculaValorOrcamento()));(
ViniGodoy

O setValueAt do seu TableModel será disparado sempre que um campo da tabela for modificado. Nesse momento, ou você dispara um evento para o JTextField, ou guarda uma referência do JTextField no model e a atualiza diretamente.

marcos.menezes

Berg,

Dessa forma ele gera um erro.

2009-11-13 11:03:30,968 DEBUG org.hibernate.jdbc.ConnectionManager aggressively releasing JDBC connection Erro: java.lang.NullPointerException

Vlw !!!

berg.pb

Hibernate?
Não entendi pq esse erro… vc não esta querendo calcular um valor e setar direto no jtextfield?

  1. Valida qual o valor que esta retornando e qual a classe dela;
  2. mostra mais detalhes sobre o q vc quer fazer e como esta fazendo.

valeu

marcos.menezes

Berg,

Tenho uma tabela com 4 colunas.

Como preencho a tabela?

Em uma comboBox eu seleciono o nome do servico, abaixo eu informo em um JTextField a quantidade daquele servico e clico em adicionar.

Na tabela ele me preenche da seguinte forma.

Nome - Quantidade - Valor Unitario - Subtotal

ate aqui tudo bem.

Agora os dados da 4 coluna (Subtotal) eu preciso soma-los e envia-los a um JTextField.

Segue como estou trabalhando com a tabela.

public void addLinha(Servico s) { DefaultTableModel modelo = (DefaultTableModel)getTabelaOrcamento().getModel(); Object [] arrayDados = new Object[]{(String)comboNomeServico.getSelectedItem(),getTquantidade().getText(),s.getValor(),calculaSubtotal(s)}; modelo.addRow(arrayDados); }

public Double calculaSubtotal(Servico s) { double v = Double.parseDouble(s.getValor()); Integer q = Integer.parseInt(getTquantidade().getText()); return (v * q); }

Meu campo JTextField é somente para receber esse somatorio, eu acho que nao preciso passar parametro nenhum pra ele.

//Somando as colunas que quero.

public Double calculaValorOrcamento() { double somaTotal = 0; for(int i=0; i<tabelaOrcamento.getColumnCount();i++ ) { Double vu = (Double)tabelaOrcamento.getValueAt(i, 4); somaTotal += vu.doubleValue(); } return somaTotal; }

//Atribuindo ao JTextField

public JTextField getTtotal() { if (ttotal == null) { ttotal = new JTextField(); ttotal.setBounds(new Rectangle(111, 230, 132, 18)); ttotal.setEditable(false); ttotal.setText(String.valueOf(calculaValorOrcamento())); } return ttotal; }

Eu acho que preciso iniciar o JTextField com um valor 0.

Vlw…

marcos.menezes

Vini,

Nao entendi o que voce disse.
Acho que a pressao esta me impedindo de pensar. :frowning:

ViniGodoy

Ah sim, é porque você continua sofrendo com o DefaultTableModel. Não te sugeri em outros tópicos para fazer um model próprio? Pois bem, esse seria o tipo de problema que seria trivial resolver…

Enfim, o DefaultTableModel tem um método chamado addTableModelListener. Ele informa quando houve mudanças no modelo. Quando esse evento for disparado, recalcule o seu JTextField.

Na criação do seu TableModel faça:

seuTableModel.addTableModelListener(new TableModelListener() { public void tableChanged(TableModelEvent evt) { calculaValorOrcamento(); } }

E boa sorte aí com o DefaultTableModel, você vai precisar, principalmente com prazo apertado…

marcos.menezes

Vini,

Sei que voce disse, mas achei dificil para o que eu queria, vou te mentir nao, funcionando isso, eu posso ate mudar, ja que ainda terei uns 15 dias pra acertar.
Nesse tempo, eu vou mudar de DefaultTableModel para o que voce disse com o modelo proprio abstraindo do AbstractTableModel…

Mas entenda, é nivel de graduação, então so preciso que isso funcione.

Abs e obrigado pela sua ajuda… vou tentar…

ViniGodoy

Eu reprovo meus alunos da graduação com essa filosofia.

Criado 12 de novembro de 2009
Ultima resposta 13 de nov. de 2009
Respostas 10
Participantes 3