Add financial balance with Jtable

0

I'm trying to develop a Java sales control program, but I'm having a problem scheduling Jtable's balance.

As you can see in the image below, the balance is being updated per line. However, since I declare the initial balance equal to 0, I need it to add up with the total value of the first line to update the balance of the first line, then take the balance of the first line and add up to the total value of the second line and update the balance of the second line (to be a cumulative balance). How do I do this?

ClassSale

publicclassVenda{privateStringpontoVenda;privateStringcliente;privateStringproduto;privateStringtipo;privateintquantidade;privatefloatvalor;publicfloatvalorTotal;publicdoublesaldo=0;publicStringgetPontoVenda(){returnpontoVenda;}publicvoidsetPontoVenda(StringpontoVenda){this.pontoVenda=pontoVenda;}publicStringgetCliente(){returncliente;}publicvoidsetCliente(Stringcliente){this.cliente=cliente;}publicStringgetProduto(){returnproduto;}publicvoidsetProduto(Stringproduto){this.produto=produto;}publicStringgetTipo(){returntipo;}publicvoidsetTipo(Stringtipo){this.tipo=tipo;}publicintgetQuantidade(){returnquantidade;}publicvoidsetQuantidade(intquantidade){this.quantidade=quantidade;}publicfloatgetValor(){returnvalor;}publicvoidsetValor(floatvalor){this.valor=valor;}publicfloatgetValorTotal(){returnvalorTotal;}publicvoidsetValorTotal(floatvalorTotal){this.valorTotal=valor*quantidade;}publicdoublegetSaldo(){returnsaldo;}publicvoidsetSaldo(doublesaldo){this.saldo=saldo+valorTotal;}}
publicclassProdutoTableModelextendsAbstractTableModel{privateList<Venda>dados=newArrayList<>();privateString[]colunas={"Ponto de Venda", "Cliente", "Produto", "Tipo", 
    "Quantidade" ,"Valor(unid.)", "Valor Total", "Saldo"};

@Override
public String getColumnName(int column){
    return colunas[column];
}
@Override
public int getRowCount() {
    return dados.size();      
}

@Override
public int getColumnCount() {
    return colunas.length;
}


@Override
public Object getValueAt(int linha, int coluna) {
    switch (coluna){
        case 0:
            return dados.get(linha).getPontoVenda();
        case 1:
            return dados.get(linha).getCliente();
        case 2:
            return dados.get(linha).getProduto();
        case 3:
            return dados.get(linha).getTipo();
        case 4:
            return dados.get(linha).getQuantidade();
        case 5:
            return dados.get(linha).getValor();
        case 6:
            return dados.get(linha).getValorTotal();
        case 7:
            return dados.get(linha).getSaldo();
    }
    return null;

}
    private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {                                          
    // TODO add your handling code here:
    Venda p = new Venda();
    p.setPontoVenda(itemPonto.getSelectedItem().toString());
    p.setCliente(itemCliente.getSelectedItem().toString());
    p.setProduto(itemProduto.getSelectedItem().toString());
    p.setTipo(itemTipo.getSelectedItem().toString());
    p.setQuantidade(Integer.parseInt(txtQuantidade.getText()));
    p.setValor(Float.parseFloat(txtValor.getText()));
    p.setValorTotal(p.valorTotal); 
    p.setSaldo(p.saldo);

    tableModel.addRow(p); 
    
asked by anonymous 20.05.2017 / 18:10

1 answer

2

The tip I give you is to remove this column and this field from Venda , it does not make much sense to update the balance every line of the purchase, when you only need a field being updated with each product added to the sale.

As an alternative to this column, you could add a JTextFied (or JLabel, your choice) just below the table, and update this field with the total, doing a method something like this:

public void atualizarSaldo(){

    float saldo, produtoValor;
    int produtoQuantidade;

        for(int i = 0; i < suaTable.getRowCount(); i++){

            produtoValor = suaTable.getModel().getValueAt(i, 5);
            produtoQuantidade = suaTable.getModel().getValueAt(i, 4);

            saldo += (produtoQuantidade * produtoValor);

        }

    campoSaldo.setText(saldo);

}

Just call this method in the same place as you add a new product to your table.

    
20.05.2017 / 18:58