Somar Coluna JTable[RESOLVIDO]

32 respostas
L

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

E

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()); }

V

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

Posta aí seu TableModel.

E

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

Posta aí seu TableModel.


é… ou isso…

L

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;
}
}
L

Alguém pode-me ajudar resolver este problema?

V

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

L
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));
  
}
    }
});
L

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

V

Já tentou colocar um breakpoint aí?

L

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

L

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

L

Galera ajuda aí estou precisando muito.

V

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

Pq seu código parece certo.

L

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);

V

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

L

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?

V

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.

L

Pessoal me ajudem aqui, estou precisando muito.

L

Vini funcionou sim, era indice a mais.

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

L

Assunto resolvido

L

Resolvido

V

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.

L

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

V

Faça assim:

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

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 ?

V

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.

V

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

V

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());
C

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());

A

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?

A

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

A

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