[RESOLVIDO] -- Erro ao tentar somar uma coluna no Jtable

Olá…!!

Criei uma DefaultTableModel no netbeans para inserir e contabilizar itens para orçamentos e pedidos de vendas.

ja consigo inserir itens do banco de dados na tabela modelo.

por default eu seto a tabela com (0) rows…

modelo = (DefaultTableModel)jTable1.getModel(); modelo.setNumRows(0);

depois eu adiciono as linhas com os produtos ja importados do banco de dados…

       DefaultTableModel modelo = (DefaultTableModel)jTable1.getModel();
       modelo.addRow(new Object[]{tf_codigo.getText(),tf_descricao_produto.getText(), tf_qtde.getText(), tf_valorUnit.getText(), tf_valorTotal.getText()});
       

mas não consiguo somar a coluna com os valores dos produtos para totalizar a compra.

eu faço assim…

public void somarColunaTotal()
    { 
    
     DefaultTableModel modelo = (DefaultTableModel)jTable1.getModel();  
        float soma = 0;  
        for (int i=0; i<jTable1.getColumnCount(); i++) 
        {  
             float valor = Float.parseFloat( String.valueOf( modelo.getValueAt(i,4) ) );   
             soma = valor;  
        }  
             
        String novoValor = String.valueOf(soma);
        tf_somaTotal.setText(novoValor);

segue o erro …

Exception in thread “AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException: 2 >= 2

eu inseri dois produtos na tabela e tentei somar para um textField…

… se eu coloco 3 produtos o erro muda o final para 3>= 3. e assim por diante.

Eu ja li a respeito e acho que eu só preciso disser para a tabela que ela tem a quantidade de linhas que aparece na tela ( refresh )

abraço …

O método getValueAt recebe a linha e depois a coluna. O seu for está repetindo de acordo com o número de colunas do seu model, então se o model tem mais colunas do que linhas a exceção é lançada. Faça com que a iteração aconteça de acordo com o número de linhas.

for (int i=0; i<jTable1.getRowCount(); i++) //Pegue o número de linhas da tabela. { float valor = Float.parseFloat( String.valueOf( modelo.getValueAt(i,4) ) ); soma = valor; }
Dica: Quando for utilizar números reais, utilize double ao invés de float. E procure implementar seu próprio TableModel para trabalhar com suas tabelas.

Melhor ainda é parar de usar o DefaultTableModel imediatamente. Esse é o caminho errado para se lidar com JTable. Aliás, para usar os recursos mais poderosos, é fundamental que você entenda exatamente como um TableModel personalizado funciona.

Siga os links da minha assinatura e aprenda a fazer seu próprio TableModel, filho de AbstractTableModel. Não pense que isso é tempo perdido, cada segundo gasto será rapidamente recuperado.

Muito bom ViniGodoy. Realmente, é melhor você usar TableModel personalizado.

[quote=Eric Yuzo]O método getValueAt recebe a linha e depois a coluna. O seu for está repetindo de acordo com o número de colunas do seu model, então se o model tem mais colunas do que linhas a exceção é lançada. Faça com que a iteração aconteça de acordo com o número de linhas.

for (int i=0; i<jTable1.getRowCount(); i++) //Pegue o número de linhas da tabela. { float valor = Float.parseFloat( String.valueOf( modelo.getValueAt(i,4) ) ); soma = valor; }
Dica: Quando for utilizar números reais, utilize double ao invés de float. E procure implementar seu próprio TableModel para trabalhar com suas tabelas.[/quote]

Valew eric!!!

o erro parou!!!

Agora eu to com outra dificuldade… O textField esta setando apenas um valor da tablela ( não esta somando…)

Isso ocorre porque o “valor” está sendo atribuído diretamente a variável “soma”.

soma = valor;Quando o “valor” deveria ser somado à variável “soma”.

soma += valor;

Isso resolve seu problema de imediato, mas siga a dica do ViniGodoy e implemente um TableModel próprio que as vantagens são enormes.

Isso ocorre porque o “valor” está sendo atribuído diretamente a variável “soma”.

soma = valor;Quando o “valor” deveria ser somado à variável “soma”.

soma += valor;

Isso resolve seu problema de imediato, mas siga a dica do ViniGodoy e implemente um TableModel próprio que as vantagens são enormes.[/quote]

valew eric deu certo mesmo!!!

brigado!!!

Ahhh!! valeu tbm viniGodoy ja vo começar a estudar!!! falow!!!

Ai Eric tu é fera essa serviu ate pra mim fazia um tempão que tava com essa duvida ! Vlw !