Recent Posts

Pages: [1] 2 3 ... 10
1
Java JSE / Re: Actualizar linea de Jtable
« Last post by superchugo on Septiembre 22, 2020, 06:40:17 pm »
Si tambien habia pensado una solucion como la que indicas, pense que podria haber algo mejor... en fin, lo solucione de la siguiente manera:

 Elimino el tablemodellistener
    dependiendo lo que suceda modifico el jtable
 agrego el tablemodellister

aqui les dejo como quedo el metodo que se encarga de ver que es lo que cambio y actualizar la linea en el jtable:

 private void actualizarLinea (TableModelEvent evento){
       model.removeTableModelListener(this);                             
       if ( evento.getType() == TableModelEvent.UPDATE ){
           int fila = evento.getFirstRow();
           int columna = evento.getColumn();
           DefaultTableModel modelo = (DefaultTableModel) this.lineasFacturajTable.getModel();
           if (columna == 5)
              return;
           else if (columna == 0){
                String codigoProducto = this.lineasFacturajTable.getValueAt(fila, columna).toString();
                buscarProducto(codigoProducto, modelo);
            } else
                if (columna == 1){
                    new vProducto().setVisible(true);
                }
                else
                    if (columna == 2){
                        actualizarSubtotales (this.lineasFacturajTable.getValueAt(fila, columna).toString(),fila);
                    }
           }
       model.addTableModelListener(this);
    }   

muchas gracias!!!
Saludos
2
Java JSE / Re: Actualizar linea de Jtable
« Last post by chuidiang on Septiembre 20, 2020, 08:21:30 pm »
Hola:

Si el tu tablemodellistener modificas el modelo, efectivamente entrará en recursión. Imagino que solo tienes un tablemodellistener tuyo. Hazlo de esta manera (pseudodigo)

Code: [Select]
class TuTableModelListener implements TableModelListener {
   boolean estoyHaciendoCambios=false;

    @Override
    public void tableChanged(TableModelEvent evento) {
        if (estoyHaciendoCambios) return;

        estoyHaciendoCambios=true;

        // Aqui lo que tengas que hacer con el modelo.

       estoyHaciendoCambios=false;
    }

}

Tendrás seguramente que afinar la idea.

Saludos.
3
Java JSE / Re: Actualizar linea de Jtable
« Last post by superchugo on Septiembre 20, 2020, 06:01:45 am »
Hola, siempre me hace la recursión, la única manera que encontré para evitarla fue, una vez que consulto a la base de datos, agregar una nueva línea al modelo con los datos obtenidos.

Si lo hago asi :
private void buscarProducto(String producto){
       try {
                    String datos[] = new String[5];
                    Connection cn = (Connection) Conexion.conectar();
                    PreparedStatement pst = cn.prepareStatement(
                            "select idProducto, descripcion, precio from productos"
                            + " where idProducto = '" + producto + "'");

                    ResultSet rs = pst.executeQuery();
                    if (rs.next()) {
                        this.lineasFacturajTable.setValueAt(rs.getString("idProducto"),this.lineasFacturajTable.getSelectedRow(),0);
                        this.lineasFacturajTable.setValueAt(rs.getString("descripcion"),this.lineasFacturajTable.getSelectedRow(),1);
                        this.lineasFacturajTable.setValueAt(rs.getString("precio"),this.lineasFacturajTable.getSelectedRow(),3);
                            }
                    cn.close();
                } catch (SQLException ex) {
                    manejo el error
                }
       
   }
}

me da el error de muchas conexiones a la base de datos...

si lo hago de esta otra manera,
 private void buscarProducto(String producto, DefaultTableModel model){
       try {
                    String datos[] = new String[5];
                    Connection cn = (Connection) Conexion.conectar();
                    PreparedStatement pst = cn.prepareStatement(
                            "select idProducto, descripcion, precio from productos"
                            + " where idProducto = '" + producto + "'");

                    ResultSet rs = pst.executeQuery();
                    if (rs.next()) {
                        datos[0] = rs.getString("idProducto");
                        datos[1] = rs.getString("descripcion");
                        datos[3] = rs.getString("precio");
                        model.addRow(datos);
                    }
                    cn.close();
                } catch (SQLException ex) {
                    manejo el error               
                    }
   }
}

evito la recursión pero no creo que sea la mejor manera, además el problema vuelve cuando quiero ingresar la cantidad del producto  :'(
4
Java JSE / Re: Actualizar linea de Jtable
« Last post by chuidiang on Septiembre 20, 2020, 05:20:31 am »
hola,

si, lo que no entiendo es por qué en las otras columnas no te hace la recursión. Se supone que al igual que en el campo cantidad rellenas la celda que seas, consultas sql y rellenas el resto de celdas de la fila. Con cantidad es o debería ser similar ¿no?. Salvo que no consultas SQL, más sencillo.

¿Qué listener de la tabla tienes cuando rellenas cantidad que no tengas con los otros y qué debería hacer ese listener?
5
Java JSE / Re: Actualizar linea de Jtable
« Last post by superchugo on Septiembre 20, 2020, 05:04:00 am »
Lo hago siempre sobre la tabla, si se ingresa el código del producto, hago la búsqueda en la base de datos, y completo las columnas de descripción y precio unitario. En este punto me surgio el problema que al querer completar las columnas con el metodo  this.lineasFacturajTable.setValueAt, me tiraba el error de sql, de decia que habia muchas conexiones. Lo solucione pasando el modelo y agregando una linea nueva al modelo, solucion que no me gusta.
Volviendo al llenado de las lineas, si se quiere ingresar la descripción, llamo a un nuevo formulario donde se buscara por descripción al producto y una vez seleccionado, vuelvo al formulario de la factura y completo las mismas columnas. Esto lo podria solucionar de la misma manera, repito no creo que sea la mejor manera. El problema es que cuando se ingresa la cantidad que se desea comprar no encuentro la manera de evitar la recursion.
muchas gracias
6
Java JSE / Re: Actualizar linea de Jtable
« Last post by chuidiang on Septiembre 19, 2020, 08:56:20 pm »
Esto que pones "el usuario puede ingresar el código del producto, en este caso debería buscar en la base de datos y actualizar los campos descripción y precio unitario. también puede ingresar la descripción del mismo y con esto realizar otra búsqueda y luego hacer lo mismo que con código" que te va bien ¿lo haces sobre la tabla o en un formulario aparte?. Presupuse que era en la tabla y por eso no entendía por qué cantidad se comportaba distinto, en cualquiera de ellos tocas la tabla.
7
Java JSE / Re: Actualizar linea de Jtable
« Last post by superchugo on Septiembre 18, 2020, 07:48:26 am »
Hola, gracias por tu pronta respuesta!!!
cuando digo llamado recursivo me refiero a cuando cambia el modelo, se llama al metodo que actualiza dicho modelo, al modificarlo se vuelve a llamar y asi no termina nunca, o me tira error de sql q existen muchas conexiones o bien de stackoverflow.
Si, distingo q columna se modifica, el probelma esta en que se puede modificar la columna uno, si el cliente ingresa el codigo del producto, se puede modificar la columna 2, si el cliente no sabe el codigo del producto y desea buscarlo por descripcion y por ultimo se modifica la columna 4 cuando ingresa la cantidad del producto que desea comprar...
 para no hablar en el aire te muestro mi codigo...

aqui crea mi clase y el tableModelListener con el llamado al metodo que actualizara la linea de la factura...

public vFactura() {
        initComponents();
        this.formatoDecimal = new DecimalFormat("#.##");
        this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        this.setLocationRelativeTo(null);
        this.lineasFacturajTable.getModel().addTableModelListener(new TableModelListener() {

            @Override
            public void tableChanged(TableModelEvent evento) {
                actualizarLinea(evento);
            }

           
        });


la funcion que actualiza la linea ve que columna se modifica y actua en consecuencia...

 private void actualizarLinea (TableModelEvent evento){
       
        int fila = evento.getFirstRow();
        int columna = evento.getColumn();
        DefaultTableModel modelo = (DefaultTableModel) this.lineasFacturajTable.getModel();
        if (columna == 0){
            String codigoProducto = this.lineasFacturajTable.getValueAt(fila, columna).toString();
            buscarProducto(codigoProducto, modelo);    //aquí agrego una línea con los datos del  producto, solución que no creo que sea la mejor
        } else
            if (columna == 1){
                new vProducto().setVisible(true);
            }
            else
             if (columna == 2){
                  float totalLinea = 1+1;  // aca deberia calcular el subtotal, tema aparte...
                 this.lineasFacturajTable.setValueAt(totalLinea, fila, columna);
             }
             else if (columna == 5)
                 return;
    }

espero haber sido claro
Muchas gracias nuevamente
Saludos
8
Java JSE / Re: Actualizar linea de Jtable
« Last post by chuidiang on Septiembre 17, 2020, 09:03:05 pm »
Hola,

No entiendo eso del "llamado recursivo", habria que ver qué hace la columna de cantidad de produccto a comprar que no hagan las otras para ver por qué esa llamada recursiva.

En cualquier caso, el TableModelEVent que recibes tiene un metodo getColumn() para saber que columna ha cambaido https://docs.oracle.com/javase/8/docs/api/javax/swing/event/TableModelEvent.html
Si es la de cantidad puedes hacer un tratamiento especial para evitar la recursion.

Saludos.
9
Java JSE / Actualizar linea de Jtable
« Last post by superchugo on Septiembre 17, 2020, 06:49:39 pm »
Hola Grupo, soy nuevo en este fascinante mundo de java y me tope con un problema que no termino de solucionar, les comento un poquito mi caso. Tengo una jtable que representa las líneas de una factura, dicha línea está compuesta por código de producto, descripción, cantidad, p unitario y subtotal. el usuario puede ingresar el código del producto, en este caso debería buscar en la base de datos y actualizar los campos descripción y precio unitario. también puede ingresar la descripción del mismo y con esto realizar otra búsqueda y luego hacer lo mismo que con código, hasta ahí todo bien, logre hacerlo siguiendo un ejemplo, http://chuwiki.chuidiang.org/index.php?title=Ejemplo_de_uso_de_TableModelListener , utiliza TableModelListener, hice algunas modificaciones y logre que anduviera, el problema esta cuando quiero ingresar la cantidad del producto que deseo comprar, no me doy cuenta como evitar el llamado recursivo que genera el TableModelListener.
Muchas gracias por su ayuda!!
Saludos
Hugo
10
C/C++ linux / Re: ayuda con un ejercicio, please
« Last post by Ryan3 on Septiembre 10, 2020, 12:41:54 am »
Para cada número entero positivo, hay un número entero negativo, y estos números enteros se llaman opuestos.
Pages: [1] 2 3 ... 10
ey