Somando dados de uma Coluna ( JTable )

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?

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?

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

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.

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 !!!

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

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…

Vini,

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

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…

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…

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