TransWikia.com

Netbeans datos duplicado en jtable

Stack Overflow en español Asked by Cuba Garcia on December 18, 2021

Estoy intentando generar un sistema de venta, en el cual se ingresa un código, busca los datos y lo carga en un JTable. Mi idea es que si el producto que cargo ya está ingresado, solamente le sume uno a la columna correspondiente que ya está cargada, de lo contrario cargaría la fila con los datos correspondientes.

Adjunto mi código el cual no está funcionando correctamente, sino que lo carga varias veces al mismo producto.

boolean ccolumnas = false;
DefaultTableModel modelo = new DefaultTableModel();

public void MostrarDatosTabla(String d, DefaultTableModel modelo) {
    Connection cnn;
    try {
        cnn = Conexion.getConexion();
        Statement smt = cnn.createStatement();
        ResultSet rs = smt.executeQuery("select codigoProducto, descripcionProducto, precio, cantidad from productos WHERE codigoProducto  LIKE '%" + d + "%'");
        String[] registros = new String[4];
        String num = "1";
        int fila = tablaa.getSelectedRow();
        if (!ccolumnas) {
            ccolumnas = true;
            ResultSetMetaData md = rs.getMetaData();
            int columnas = md.getColumnCount();
            for (int i = 1; i <= columnas; i++) {
                modelo.addColumn(md.getColumnLabel(i));
            }
        }
        while (rs.next()) {
            String regi = rs.getString("codigoProducto");
            registros[0] = rs.getString("codigoProducto");
            registros[1] = rs.getString("descripcionProducto");
            registros[2] = rs.getString("precio");
            if (d.equals(regi)) {
                String precio = tablaa.getValueAt(fila, 3).toString();
                int numero1 = Integer.parseInt(precio);
                int numero = Integer.parseInt(num);
                int suma = numero1 + numero;
                String tot = Integer.toString(suma);
                registros[3] = tot;
            } else {
                registros[3] = num;
            }
            modelo.addRow(registros);
        }
        tablaa.setModel(modelo);
        cnn.close();
    } catch (SQLException e) {
        JOptionPane.showMessageDialog(this, e);
    }
}

One Answer

Con este método podemos buscar el producto en el modelo.

private int buscaProductoEnModelo(String codigo, DefaultTableModel modelo) {
  if (codigo != null && modelo != null) {
     for (int renglon = 0; renglon <modelo.getRowCount(); renglon++) {
         String codigoEnRenglon = (String)modelo.getValueAt(renglon, 0);
         if (codigo.equals(codigoEnRenglon)) {
           return renglon;
        }
 }
 return -1;
}

Para luego cambiar el método donde actualizas tabla:

public void MostrarDatosTabla(String d, DefaultTableModel modelo) {

  //primero buscas en modelo para evitar buscar en base de datos si ya está en modelo.
 int renglon = buscaProductoEnModelo(d, modelo);
 if (renglon>=0) { //si encontró el producto ya en modelo
     int total = Integer.parseInt(modelo.getValueAt(renglon, 3); //esto esta ineficiente y peligroso, cambiar a Integer esta columna
     total == ?? //aquí no entiendo bien como actualizas el precio o el total
                 //pero creo tú lo puedes hacer y lo actualizas con siguiente línea:
     modelo.setValueAt(Integer.toString(total), renglon, 3);
     modelo.fireTableRowsUpdated(renglon, renglon); //necesitamos avisarle al modelo que ha cambiado para que se muestre el cambio en la tabla.
 }
 else {

  Connection cnn;
  try {
    cnn = Conexion.getConexion();
    Statement smt = cnn.createStatement();
    ResultSet rs = smt.executeQuery("select codigoProducto, descripcionProducto, precio, cantidad from productos WHERE codigoProducto  LIKE '%" + d + "%'");
    String[] registros = new String[4];
    String num = "1";
    int fila = tablaa.getSelectedRow();
    if (!ccolumnas) {
        ccolumnas = true;
        ResultSetMetaData md = rs.getMetaData();
        int columnas = md.getColumnCount();
        for (int i = 1; i <= columnas; i++) {
            modelo.addColumn(md.getColumnLabel(i));
        }
        tablaa.setModel(modelo); //aqui seteas el modelo y no cada vez!
    }
    while (rs.next()) {
        String regi = rs.getString("codigoProducto");
        registros[0] = rs.getString("codigoProducto");
        registros[1] = rs.getString("descripcionProducto");
        registros[2] = rs.getString("precio");
        if (d.equals(regi)) {
            String precio = tablaa.getValueAt(fila, 3).toString();
            int numero1 = Integer.parseInt(precio);
            int numero = Integer.parseInt(num);
            int suma = numero1 + numero;
            String tot = Integer.toString(suma);
            registros[3] = ?? //no entiendo como calculas este dato para
                              //el primer producto.
        }
        modelo.addRow(registros);
    }
  //   tablaa.setModel(modelo);
    cnn.close();
 } catch (SQLException e) {
     JOptionPane.showMessageDialog(this, e);
 }
}

Answered by AlbertoLopez on December 18, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP