Somar Coluna JTable[RESOLVIDO]

32 respostas
Lags

Olá Pessoal,

Eu possuí uma tabela que adiciona |código produto|descrição|Preço|quantidade|ValorTotal| de acordo com os produto que o cliente deseja comprar, porém estou querendo que ele some a coluna valorTotal, setar valor dessa soma JTxtValorTotalDosProdutos. Só que estou com dificuldade em fazer isso.
Desde já agradeço pela atenção de todos.

32 Respostas

erico_kl

tu pode fazer um for que percorre a tabela somando a coluna desejada…

double count=0; for (int i=0; i<=table.getRowCount()-1;i++) { count+=Double.parseDouble(table.getValueAt(i, 4).toString()); }

ViniGodoy

Ué, é só fazer seu tablemodel retornar a soma.

Posta aí seu TableModel.

erico_kl

ViniGodoy:
Ué, é só fazer seu tablemodel retornar a soma.

Posta aí seu TableModel.


é… ou isso…

Lags

Vini eu até consegui implementar, porém onde colocar para executar que não sei.

Segue o código:
private void calculaTotalProdutos()
{
   Double soma =0.0;
  for (int i = 0 ; i < jtProdutos.getColumnCount() ; i++)
  {
     if (jtProdutos.getValueAt(i, 0).equals(true))
     {
      Double valorAux =(Double) jtProdutos.getValueAt(i, 5 );
      soma+= valorAux.doubleValue();
     }
  
  JTxtValorTotalProdutos.setText(String.valueOf(soma));
  //valorTotal = 0;
}
}
Lags

Alguém pode-me ajudar resolver este problema?

ViniGodoy

Você pode criar um botão “Calcular total” e colocar esse código no ActionListener do botão.

Lags
Vini dê uma olhada para mim nesse código ele não esta fazendo nenhuma ação no botão, sabe oque está errado:
private void calculaTotalProdutos()
{
//adiciona listenr para o botao
JBtnCalculartotalVenda.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent ev){
        for (int i = 0 ; i < jtProdutos.getColumnCount() ; i++)
  {
     if (jtProdutos.getValueAt(i, 0).equals(true))
     {
      Double valorAux =(Double) jtProdutos.getValueAt(i, 5 );
      soma+= valorAux.doubleValue();
     }

  JTxtValorTotalProdutos.setText(String.valueOf(soma));
  
}
    }
});
Lags

No botão só chamei o método.

ViniGodoy

Já tentou colocar um breakpoint aí?

Lags

Botei Breakpoint, ele só consegue entrar onde adicionei ActionListener no botão e não entra no método actionPerformed.

Lags

Alguém pode-me dar uma ideia melhor aqui?

Lags

Galera ajuda aí estou precisando muito.

ViniGodoy

Mas vc tentou colocar o breakpoint dentro do actionlistener, no for, e clicar no botão?

Pq seu código parece certo.

Lags

Vini fiz isso, só que dá erro na linha que esta em negrito no final do código.

private void calculaTotalProdutos() { try{ for (int i = 0 ; i < jtProdutos.getColumnCount() ; i++) { Double valorAux =(Double) jtProdutos.getValueAt(i,5); soma+= valorAux.doubleValue(); } JTxtValorTotalProdutos.setText(String.valueOf(soma)); } catch(Exception e){ JOptionPane.showMessageDialog(null,"Erro ao calcular Total Produtos: "+e.getMessage()); } }

Dá erro neste linha corta a execução e cai no catch e retorna a mensagem 5>=5
Double valorAux =(Double) jtProdutos.getValueAt(i,5);

ViniGodoy

No seu for, não deveria ser getRowCount() no lugar de getColumnCount()? Você vai somar os dados das linhas, não das colunas.

Lags

Bom dia Vini,

Eu tentei com RowCount, dá mesmo erro quando chega nessa linha.

Double valorAux =(Double) jtProdutos.getValueAt(i, 5);

Quando cai no catch retorna uma mensagem 5>=5.

Sabe o que pode ser?

ViniGodoy

Provavelmente sua tabela tem 5 colunas. Então, o índice da quinta coluna será 4, não 5. Lembre-se a primeira coluna tem índice 0.

Lags

Pessoal me ajudem aqui, estou precisando muito.

Lags

Vini funcionou sim, era indice a mais.

Outra coisa eu vi um postagem que vc falou sobre evento actionTableModel, para o que serve?

Lags

Assunto resolvido

Lags

Resolvido

ViniGodoy

Estava falando de TableModel.

Na verdade, o ideal é que você não chame diretamente o método getValueAt. Esse método devia ser exclusividade do Java, e só usado na hora de desenhar o JTable. O ideal é que você faça um tablemodel próprio, e esse model tenha um método get, que te retorna a classe que a tabela está desenhando.

Veja um exemplo em:
http://www.guj.com.br/posts/list/132698.java#714736

Isso não só deixará o código mais simples, rápido e ocupando menos memória, como também evitará casts. Além disso, evita que seu programa tenha que ser modificado caso alguma coluna seja adicionada ou retirada do JTable.

Lags

Eu queria colocar esta questão como resolvido, mas não esta dando certo.
É só colocar [RESOLVIDO] na frente do assunto não é?Pois se for fiz não deu certo

ViniGodoy

Faça assim:

  1. Vá no seu primeiro post;
  2. Clique em editar;
  3. Coloque [Resolvido] na frente do assunto;
  4. Clique em enviar.
vitaaoo

Eu fiz desse jeito e meu sistema continua imprimindo a mensagem Erro ao calcular Total Produtos: null
Obs: Os campos estão preenchidos, não tem nenhum campo vazio na tabela.

Double soma = null;
        
        try{
        for (int i = 1 ; i < getTabela().getRowCount()-1 ; i++) {
        Double valorAux = (Double)(getTabela().getValueAt(i,4));
        soma+= valorAux.doubleValue();
        }
        getTotal().setText(soma.toString());
        }
        catch(Exception e){ JOptionPane.showMessageDialog(null,"Erro ao calcular Total Produtos: "+e.getMessage());
        }

Alguém ai pode me dizer o que eu fiz errado ?

ViniGodoy

Troque para:

catch(Exception e){ JOptionPane.showMessageDialog(null,"Erro ao calcular Total Produtos: "+e.getClass().getSimpleName() + ":" + e.getMessage()); }

E aí conte-nos o que veio escrito.

vitaaoo

Independente do numero de itens que eu adiciono sempre aparece a mesma mensagem.

vitaaoo

Descobri, na verdade o problema era o seguinte … o numero de linhas da tabela era maior que o numero de linhas preenchidas entao, ele sempre pegava valores null.

Resolvi adicionando linhas dinamicamente

((DefaultTableModel)jTable1.getModel()).addRow(new Vector());
celsonery

Cara eu fiz esse metodo e funcionou.

private String CalculaTotal() { Double Orcamento = 0.0; for ( int i = 0; i < jTabExames.getRowCount(); i++){ Orcamento += Double.parseDouble( jTabExames.getValueAt(i, 3).toString()); } return Orcamento.toString(); }

ei eu coloco

LabelTotal.setText(CalculaTotal());

Anselmo_Nelsonjose4

Alo pesoal to a pasar mal pesso a vossa ajuda. Eu trnho uma tabela com dil preco l quantidade l total gostaria de pegar os dados do coluna preco multiplicar pelos dados da culuna quantidade nas linhas corespondentes como farei isso?

Anselmo_Nelsonjose4

Eu nao pertendo colocar num lebol nem numa fild eu quer colocar na mesma tabela mas numa outra xoluna

Anselmo_Nelsonjose4

Pexoal elhem o codigo.

Void calculadif(){

Int cont =jttabela.getRowCAunt();
float mvd=0, cheq=0;

for(int i=0; i<cont; i++){

Oject valorcheq=jttabela.getvalueAt(i,1);
Object Valorvd=jttabela.getvalueAt(i,2);

String cheq= String.valurOf(valorcheq);
String vd= String.valurOf(valorvd);

mcheq=Float.parseFloat(cheq);
mvd=Float.parseFloat(vd);

Obgect retorna = (mcheq-mvd);

Jttabela.setValueAt(retorna, i, 3);

}}

Com system.out.println(rerorma ); mostra o resultado sertingo so nao consigo jogar ixo na nha tabela

Criado 11 de dezembro de 2009
Ultima resposta 12 de abr. de 2016
Respostas 32
Participantes 6