buen dia , tengo un problema tengo una tabla que populo de la siguiente manera
Código:
//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);
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
Código:
public 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);
}
}
despues de agregar el registro debo correr una rutina para totalizar los contenidos de la tabla con el siguiente metodo
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:
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:
}
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