26/10/12

Problema Resuelto: Sumar columna de numeros

Problema: El problema dice así, "Quiero sumar los números de una columna, los valores de las celdas se pueden modificar diatónicamente". Es todo o.O

Respuesta:

Para resolver este problema partimos de una interfaz básica, utilizamos el IDE Netbeans 6.9

Solo sumaremos números enteros. Para saber si se realizo o no algún cambio sobre el JTable debemos hacer uso de un listener, más propiamente de un TableModelListener,
Nuestro ejemplo estará compuesto de una columna de productos STRING y otra de cantidades INT
esta segunda columna es la que sumaremos. Cuando se cambie el valor de cualquier celda de la segunda columna, se hará uso de un método privado para recalcular el total, si por error se introduce un valor NO NUMÉRICO,  el valor, cualquiera que fuere sera reemplazado por un cero "0".

El código es:

import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
/**
 * @web http://www.jc-mouse.net/
 * @author Mouse
 */
public class interfaz extends javax.swing.JFrame {

    //se inicia la tabla con algunos datos
    DefaultTableModel model = new DefaultTableModel(
           new Object[][] {
                { "Harina", "10" },
                { "Huevos", "21" },
                { "Chorizo", "53" },
                { "Leche", "4" },
                { "Pan", "34" },
                { "Mantequilla", "12" },
                },
      new Object[] { "Producto", "Cantidad" });

    /** Creates new form interfaz */
    public interfaz() {
        initComponents();

    suma();//primera suma del total 
    this.jTable1.setModel( model );
    //se añade a la tabla un Listener
    this.jTable1.getModel().addTableModelListener(new TableModelListener() {
      //cuando se produzca un cambio se ejecuta el codigo que coloquemos aqui dentro
      public void tableChanged(TableModelEvent e) {
          //sabemos que nuestros numeros se encuentra en la segunda columna iniciando de 0
          if( e.getColumn()==1 )//cuando se modifique un valor de la columna
              suma();//se ajusta el resultado
      }
    });
    }

    /** Metodo privado para la suma de cantidades */
    private void suma()
    {
        int total = 0;
        //recorrer todas las filas de la segunda columna y va sumando las cantidades
        for( int i=0 ; i<model.getRowCount() ; i++)
        {
            int numero =0;
            try{
                //capturamos valor de celda
                numero = Integer.valueOf( model.getValueAt(i, 1).toString() );
            }
            catch (NumberFormatException nfe){ //si existe un error se coloca 0 a la celda
                numero = 0;
                model.setValueAt(0, i, 1);
            }
            //se suma al total
            total += numero;
        }
        //muestra en el componente
        this.jTextField1.setText( String.valueOf(total) );
    }

Cuando ejecutemos tendremos como resultado:

Bájate el código AQUI

5 comentarios:

  1. amigo mouse muchas gracias.. por su colaboracion y el tanto compartir con nosotros de ante mano le deseo las mas feliz navidad ... y agradecerle,,,,por todo y para el otro año que Dios te siga bendiciendo en tus cosas...

    ResponderEliminar
  2. amigo mouse muchas gracias por compartir tanto y tener tanta calma con nosotros los que apenas comenzamos en programcion en java se lo agradecemos inmnamente y te deseo una FELIZ NAVIDAD y agradecerte inmensamente por todo y que el otro año que viene Dios te siga bendiciendo.. en tus cosas

    ResponderEliminar
  3. estoy haciendo un sistema apenas estoy aprendiendo y la verdad
    me has ayudado mas que esos maestros de la uni ...
    gracias me gusta mucho tu blog

    ResponderEliminar
  4. Amigo, cuando en una celda no exite un numero, la funcion me marca error, sabes como se puede solucionar?

    ResponderEliminar