Código:
aqui todo bien , despues hago una consulta sql a mi base y en base a los resultados comienzo a popular el modelo de la tabla de la siguiente manera//declaro el modelo DefaultTableModel ModeloVenta; //declaro mi arreglo que seran los registros que se iran agregando a mi modelo de tabla String [] RegistroDetalle = new String [9]; //al iniciar la clase arranco la declaracion del modelo y lo asigno a un jtable String [] TitulosDetalle = {"ID","ARTICULO","DESCRIPCION","VARIEDAD","TALLA","BARCODE","PRECIO","CANTIDAD","TOTAL"}; ModeloDetalleVenta = new DefaultTableModel(null,TitulosDetalle); tblDetalleVenta.setModel(ModeloDetalleVenta);
Código:
despues de agregar el registro debo correr una rutina para totalizar los contenidos de la tabla con el siguiente metodopublic void BuscarCodigo()throws SQLException{ ConexionMySQL ConexionMysql = new ConexionMySQL(); Connection cn = ConexionMysql.Conectar(); try{ Statement stCodigo = cn.createStatement(); ResultSet rsCodigo = stCodigo.executeQuery("select t1.id_art,t1.articulo,t1.descripcion,t2.variedad,t3.talla,t3.barcode,t4.precio_local from articulos as t1 left outer join variedades as t2 on t1.id_var = t2.id left outer join bc_articulos as t3 on t1.id_art = t3.id_art left outer join listaprecios_local as t4 on t1.id_art = t4.id_art where t3.barcode = '" + Barcode + "'"); if(!rsCodigo.next() && rsCodigo.getRow()==0){ JOptionPane.showMessageDialog(null,"Articulo no registrado"); txtCodigo.setText(""); txtCodigo.requestFocus(); }else{ rsCodigo.beforeFirst(); while(rsCodigo.next()){ RegistroDetalle [0] = rsCodigo.getString("ID_ART"); RegistroDetalle [1] = rsCodigo.getString("ARTICULO"); RegistroDetalle [2] = rsCodigo.getString("DESCRIPCION"); RegistroDetalle [3] = rsCodigo.getString("VARIEDAD"); RegistroDetalle [4] = rsCodigo.getString("TALLA"); RegistroDetalle [5] = rsCodigo.getString("BARCODE"); if(rsCodigo.getString("PRECIO_LOCAL")== null){ RegistroDetalle [6] = "0"; RegistroDetalle [8] = "0"; }else{ RegistroDetalle [6] = rsCodigo.getString("PRECIO_LOCAL"); RegistroDetalle [8] = rsCodigo.getString("PRECIO_LOCAL"); } RegistroDetalle [7] = "1"; } ModeloDetalleVenta.addRow(RegistroDetalle); TotalesVenta(); txtCodigo.setText(""); txtCodigo.requestFocus(); } } catch(Exception e){ JOptionPane.showMessageDialog(null, e); } }
Código:
public void TotalesVenta(){ int Filas; TotalArticulos = 0; ImporteTotal = 0; Subtotal = 0; Iva = 0; Filas = tblDetalleVenta.getRowCount(); for(int iVentas = 0;iVentas < Filas ;iVentas++){ TotalArticulos = TotalArticulos + Integer.parseInt((String)ModeloDetalleVenta.getValueAt(iVentas,7)); ImporteTotal = ImporteTotal + Double.parseDouble((String)ModeloDetalleVenta.getValueAt(iVentas,8)); } Subtotal = ImporteTotal / (1 + TasaIva); Iva = ImporteTotal - Subtotal; lblSubtotal.setText(df.format(Subtotal)); lblIva.setText(df.format(Iva)); lblImporteTotal.setText(df.format(ImporteTotal)); lblTotalArticulos.setText(String.valueOf(TotalArticulos)); }
todo funciona bien hasta que hago una funcion para modificar el precio , despues de ejecutarlo , no me totaliza como lo estaba haciendo y me tira un error
Código:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.String at jsantiago_pv.VentasMostrador.TotalesVenta(VentasMostrador.java:432) at jsantiago_pv.VentasMostrador.txtNuevoPrecioActionPerformed(VentasMostrador.java:1527) at jsantiago_pv.VentasMostrador.access$400(VentasMostrador.java:35) at jsantiago_pv.VentasMostrador$5.actionPerformed(VentasMostrador.java:907) at javax.swing.JTextField.fireActionPerformed(JTextField.java:508) at javax.swing.JTextField.postActionEvent(JTextField.java:721) at javax.swing.JTextField$NotifyAction.actionPerformed(JTextField.java:836) at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1661) at javax.swing.JComponent.processKeyBinding(JComponent.java:2879) at javax.swing.JComponent.processKeyBindings(JComponent.java:2926) at javax.swing.JComponent.processKeyEvent(JComponent.java:2842) at java.awt.Component.processEvent(Component.java:6281) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4860) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4686) at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1908) at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:752) at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1017) at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:889) at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:717) at java.awt.Component.dispatchEventImpl(Component.java:4730) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Window.dispatchEventImpl(Window.java:2713) at java.awt.Component.dispatchEvent(Component.java:4686) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) at java.awt.EventQueue.access$000(EventQueue.java:101) at java.awt.EventQueue$3.run(EventQueue.java:666) at java.awt.EventQueue$3.run(EventQueue.java:664) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:680) at java.awt.EventQueue$4.run(EventQueue.java:678) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:677) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
el codigo de la rutina para cambiar el valor del precio y total de mi tabla es la siguiente
Código:
no se si me pudieran ayudar en como solucionar el error que me tira , que al parecer es cuando recibe normamente la funcion un string y al momento de parsearlo a double me detiene la funcion , como asignar los valores de cantidad y total del modelo sin que me envie el error estare muy agradecido de verdad , de antemano aprecio el tiempo se tomaron para leer mi problema y espero su ayuda private void txtNuevoPrecioActionPerformed(java.awt.event.ActionEvent evt) { int Art = tblDetalleVenta.getSelectedRow(); int Cant; Double Total; ModeloDetalleVenta = (DefaultTableModel)tblDetalleVenta.getModel(); ModeloDetalleVenta.setValueAt(Double.parseDouble(txtNuevoPrecio.getText()), Art,6); Cant = Integer.parseInt((String)ModeloDetalleVenta.getValueAt(Art,7)); Total = Double.parseDouble(txtNuevoPrecio.getText()) * Cant; ModeloDetalleVenta.setValueAt(Total,Art,8); CambioPrecioForm.dispose(); txtNuevoPrecio.setText(""); TotalesVenta(); // TODO add your handling code here: }