Como faço para calcular todos os valores de uma coluna jtable?

Tenho uma tabela com o nome de tabelaCompra, nela tenho uma coluna total, quero que essa some os valores que estão nessa coluna e jogue em uma jtextfield barraTotal. Mas estou tendo uns problemas, fiz uma soma para pegar dois valores de duas textfilds e salvar na barraTotal, mas ele não está salvando na barra total. Outro problema é que não sei como faço para ele pegar os valores dessa coluna total, e ir somando e mostrando na barraTotal.
Fiz esse método:
private void calculaTotal() {
int soma = 0;
try {
for (int i = 0; i < tabelaCompra.getColumnCount(); i++) {
Double valorAux = (Double) tabelaCompra.getValueAt(i, 6);
soma += valorAux;
}
Double.parseDouble(barraTotal.getText());
barraTotal.setText(String.valueOf(soma));
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Erro ao calcular Total Produtos: " + e.getMessage());
}
}

Depois dentro do botão confirmar eu fiz essas somas de textfilds e chamei o método:

private void confirmarActionPerformed(java.awt.event.ActionEvent evt) {

    DefaultTableModel tabela = (DefaultTableModel) this.tabelaCompra.getModel();
    Object[] dados = {
        barraID.getText(),
        barraNome.getText(),
        barraMarca.getText(),
        barraQuantidadeVenda.getText(),
        barraPeso.getText(),
        barraVenda.getText(),
        barraTotal.getText()
    };

    tabela.addRow(dados);

    int x = Integer.parseInt(barraQuantidade.getText());
    int y = Integer.parseInt(barraQuantidadeVenda.getText());
    int z = x - y;
    barraQuantidade.setText(String.valueOf(z));
    
    int a = Integer.parseInt(barraID.getText());
    int b = Integer.parseInt(barraQuantidadeVenda.getText());
    double w = a * b;
    Double.parseDouble(barraTotal.getText());
    barraTotal.setText(String.valueOf(w));
    calculaTotal();
}

Agradeço a ajuda desde já.

Eu não entendi muito bem, vc ta conseguindo fazer a soma da tabela? Se não, tenta esse código de baixo, eu acho que tem que fazer algumas alteraçoes de acordo com vc, mas eu tentei mexer pra se adaptar.

Faz assim pra ir somando quando adicionar um novo item,… A cada adicionada de item, você chama esse metodo “somarValores”, pq ele vai adicionar o item na tabela e vai atualizar a soma

public void somarValores() {
    try {
            double somaTotal = 0;
            for (int i = 0; i < tabelaCompra.getRowCount(); i++) {
                somaTotalRecebido += Double.parseDouble(tabelarecebidos.getValueAt(i, 6).toString());
                       //AQUI VC JOGA PRO JTEXTFIELD
            barraTotal.setText("" + somaTotal);

        }
    } catch (NumberFormatException | SQLException e) {
    System.out.println("Erro ao somar: " +e.getMessage());
    }
}

Tentei fazer como você disse continua o erro, tenho dois problemas em suma, primeiro não consigo fazer a multiplicação para sair no textfield barraTotal, para ai eu salvar na tabela.

int a = Integer.parseInt(barraID.getText());
int b = Integer.parseInt(barraQuantidadeVenda.getText());
double w = a * b;
Double.parseDouble(barraTotal.getText());
barraTotal.setText(String.valueOf(w));

fiz assim mas ele não pega os valores e joga na textfiled barraTotal. Tu sabe me dizer como resolver isso? talvez dai já clareie para o próximo problema.

Fiz uns testes aqui, e comigo funcionou usando “double” ao invés de “int”

Double e Float é para valores= 54.90, -200.75...

Int é só número inteiro= 1, 2, 3, 4

Então ficaria:

double a = Double.parseDouble....
double b = Double.parseDouble....
double w = a * b;

Outra coisa que aqui não funcionou, foi o: Double.parseDouble(barraTotal.getText());, tira essa linha e testa aí…

Bom essa parte deu certo, aparentemente o erro era essa linha mesmo Double.parseDouble(barraTotal.getText());
Agora usei o seu método somarValores mas ele não pegou os valores da coluna total, ele só mostra o valor de um por um. você sabe dizer onde estaria o erro?

Olha cara, eu testei aqui, adicionei valores e funcionou normalmente…

public void somarValores() {
    try {
        double somaTotal = 0;
        for (int i = 0; i < tabelagastos.getRowCount(); i++) {

            somaTotal += Double.parseDouble(tabelagastos.getValueAt(i, 2).toString());
            //AQUI VC JOGA PRO JTEXTFIELD
            jLabel8.setText("" + somaTotal);
        }
    } catch (NumberFormatException e) {
        System.out.println("Erro ao somar: " + e.getMessage());
    }
}

Apresenta algum erro aí?

Pelo que vi o seu está em uma jlabel. O meu queria que fosse para um jtextfield para eu salvar no mysql o resultado dele. Será que o problema foi esse? No meu ele não faz a soma da coluna.

Não, é a mesma coisa, o jlabel/textfield é só coisa da interface. O que vale mesmo é a escrita.

Deu algum erro aí?

O meu método baseado no seu ficou assim

public void somarValores() {
try {
double somaTotal = 0;
for (int i = 0; i < tabelaCompra.getRowCount(); i++) {
somaTotal += Double.parseDouble(tabelaCompra.getValueAt(i, 6).toString());
barraTotal.setText(String.valueOf(somaTotal)); //AQUI VC JOGA PRO JTEXTFIELD
barraTotal.setText("" + somaTotal);

        }
    } catch (NumberFormatException e) {
        System.out.println("Erro ao somar: " + e.getMessage());
    }
}

o erro que está apresentando pra mim é esse

Exception in thread “AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException: 6 >= 6
at java.util.Vector.elementAt(Vector.java:474)
at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:294)
at sun.swing.SwingUtilities2.convertColumnIndexToModel(SwingUtilities2.java:1988)
at javax.swing.JTable.convertColumnIndexToModel(JTable.java:2582)
at javax.swing.JTable.getValueAt(JTable.java:2718)
at telas.venda.tabelaProdutoMouseClicked(venda.java:489)
at telas.venda.access$1300(venda.java:11)
at telas.venda$15.mouseClicked(venda.java:322)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270)
at java.awt.Component.processMouseEvent(Component.java:6536)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2237)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2295)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4889)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4467)
at java.awt.Container.dispatchEventImpl(Container.java:2281)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Exception in thread “AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException: 6 >= 6
at java.util.Vector.elementAt(Vector.java:474)
at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:294)
at sun.swing.SwingUtilities2.convertColumnIndexToModel(SwingUtilities2.java:1988)
at javax.swing.JTable.convertColumnIndexToModel(JTable.java:2582)
at javax.swing.JTable.getValueAt(JTable.java:2718)
at telas.venda.tabelaProdutoMouseClicked(venda.java:489)
at telas.venda.access$1300(venda.java:11)
at telas.venda$15.mouseClicked(venda.java:322)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270)
at java.awt.Component.processMouseEvent(Component.java:6536)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2237)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2295)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4889)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4467)
at java.awt.Container.dispatchEventImpl(Container.java:2281)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Erro ao somar: empty String
CONSTRUÍDO COM SUCESSO (tempo total: 19 segundos)

Índice de matriz fora dos limites de exceção 6>=6.

Quais colunas vc tem na sua tabela? E vc já tem valor na coluna?

O algoritmo da minha tabela:

DefaultTableModel tabela = (DefaultTableModel) this.tabelaCompra.getModel();
Object[] dados = {
barraID.getText(),
barraNome.getText(),
barraMarca.getText(),
barraQuantidadeVenda.getText(),
barraPeso.getText(),
barraVenda.getText(),
barraTotal.getText()
};

Ele salva os valores na coluna, mas não os soma. Você tem ideia do porque?

Estava dando uma olhada e percebi que o primeiro valor que ele salva na tabela ele salva vazio e todos os outros ele salva normal, coloquei pra ele dar um JOptionPane para mostrar a mensagem de erro em tela, e ele tá retornando a mensagem de erro “empty string”

Estava dando uma olhada e o erro de java.lang.ArrayIndexOutOfBoundsException: 6 >= 6 mas eu tenho exatamente 6 campos na minha tabela partindo do campo 0. Então não sei onde seria o erro.
image

Tô realmente sem ideia do que seja, alguém pode me ajudar por favor.

cara, faz assim, coloca isso de somar em um botão e vê o resultado, deixa tudo aparecer e depois você clica no botão pra sair a soma

[RESOLVIDO]Calcular valore da tabela olha esse tópico, é semelhante a sua dúvida

Blz vou dar uma olhada nessas vídeo aulas, valeu mano.

1 curtida