Java - MOSTRAR DATOS DE UN JTABLE EN OTRO JFRAME

 
Vista:
Imágen de perfil de Alejandra
Val: 31
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

MOSTRAR DATOS DE UN JTABLE EN OTRO JFRAME

Publicado por Alejandra (17 intervenciones) el 28/04/2020 02:31:38
Buenas noches:

estoy teniendo problemas con el programa de la tesis (es para un negocio donde hacen asado), en dicho programa tengo una tabla Clientes en dónde registro los clientes (con clientes cargados) y en el menú tengo un botón de CAJA DE COBRO que es dónde quiero emitir un ticket por cada cliente que realiza una compra, entonces en el JFRAME de la CAJA agregué un botón CLIENTES en el cual quiero que al hacer clic me muestre la tabla de TODOS los clientes registrados y que al seleccionar un registro de la tabla NO envíe TODOS los datos sino algunos, busqué en otros ejemplos que tenía y lo quise aplicar al mío pero no tuve éxito... adjunto código de la clase LISTASCLIENTESAD - porque separé usuario administrador y usuario normal

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
private void mostrarActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
 
  if (tablaClientes.getRowCount() > 0) {
        try {
            DefaultTableModel tabladet = (DefaultTableModel) ventas.CajaAd.tablaCaja.getModel();
 
            String[] dato = new String[7];
 
            int fila = tablaClientes.getSelectedRow();
 
            String cod;
            String ape;
            String nom;
            String dni;
            String dir;
 
            if (fila == -1) {
                JOptionPane.showMessageDialog(this, "Seleccione un registro.", "Clientes", 0,
                        new ImageIcon(getClass().getResource("/imagenes/usuarios/info.png")));
            } else {
                cod = tablaClientes.getValueAt(fila, 0).toString();
                ape = tablaClientes.getValueAt(fila, 1).toString();
                nom = tablaClientes.getValueAt(fila, 2).toString();
                dni = tablaClientes.getValueAt(fila, 4).toString();
                dir = tablaClientes.getValueAt(fila, 6).toString();
 
 
                CajaAd.id.setText(cod);
                CajaAd.cliente1.setText(nom+"   "+ape);
                CajaAd.dni.setText(dni);
                CajaAd.direc.setText(dir);
 
                this.dispose();
            }
            } catch (Exception e) {
        }
    } else {
        JOptionPane.showMessageDialog(this, "No hay registros.", "Clientes", 0,
                new ImageIcon(getClass().getResource("/imagenes/usuarios/info.png")));
    }
}



Código de la clase OpcionesCl - opciones Clientes: Listar - con este método estoy teniendo problemas

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public static void listarCliente(String busca) {
 
   DefaultTableModel modelo = (DefaultTableModel)clientes.Clientes.tablaClientes.getModel();
 
    while (modelo.getRowCount() > 0) {
        modelo.removeRow(0);
    }
    String sql = "";
    if (busca.equals("")) {
        sql = ClientesCod.LISTAR_CL;
    } else {
        sql = "SELECT * FROM clientes WHERE (codigo_cl like'" + busca + "%' or nombre_cl like'" + busca + "%') "
                + " order by apellido_cl";
    }
    String datos[] = new String[7];
    try {
        Statement st = cn.createStatement();
        ResultSet rs = st.executeQuery(sql);
        while (rs.next()) {
            datos[0] = rs.getString("codigo_cl");
            datos[1] = rs.getString("apellido_cl");
            datos[2] = rs.getString("nombre_cl");
            datos[3] = rs.getString("sexo_cl");
            datos[4] = rs.getString("dni_cl");
            datos[5] = rs.getString("cel_cl");
            datos[6] = rs.getString("dir_cl");
            modelo.addRow(datos);
        }
    } catch (SQLException ex) {
        Logger.getLogger(OpcionesCl.class.getName()).log(Level.SEVERE, null, ex);
    }
}

adjunto imagen del error que me muestra Netbeans


Captura-de-pantalla-12

ese es un problema, el otro es que si hago clic en el botón Clientes - dentro del jframe CAJA DE COBRO - no me muestra el jtable tablaClientes a menos que haya abierto en el menú principal el botón Clientes (espero ser clara con los inconvenientes que estoy teniendo)...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Franklin
Val: 456
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

MOSTRAR DATOS DE UN JTABLE EN OTRO JFRAME

Publicado por Franklin (179 intervenciones) el 28/04/2020 15:02:15
si no me equivoco por la forma de crear el DefaultTableModel la tabla la tienes definida como public static para acceder a ella mediante el package.clase/form.objeto. Puede ser que al momento de crear el modelo esa clase o form no estén disponibles, sea porque no esten abiertos o le hayas hecho dispose.

te recomendaría mandar la tabla mediante el constructor o con un get / set, de esta manera guardas una relación entre las clases y sabes que ambas deben estar disponibles para dar uso a sus caracteristicas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandra
Val: 31
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

MOSTRAR DATOS DE UN JTABLE EN OTRO JFRAME

Publicado por Alejandra (17 intervenciones) el 05/05/2020 00:15:51
Buenas tardes:

Gracias Franklin por responder!!! finalmente pude solucionar pero ahora se me presentó otro inconveniente:

- quiero que al hacer clic en el botón Realizar Venta automáticamente me genere un ticket, probé adaptar otros ejemplos de otros programas al mío pero NO logro que se genere el mismo


adjunto código de lo que quise implementar:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
void factura(){
 
    String SQL="INSERT INTO registro_venta(numero,cod_cli,total,fecha) VALUES (?,?,?,?)";
 
    String numbol=numFac.getText();
    String codcli=id.getText();
 
    String total1=total.getText();
    String fecha=fecha1.getText();
try {
        PreparedStatement pst = cn.prepareStatement(SQL);
        pst.setString(1,numbol);
        pst.setString(2,codcli);
        pst.setString(3,total1);
        pst.setString(4,fecha);
 
        int n= pst.executeUpdate();
        if(n>0)
        {
            JOptionPane.showMessageDialog(null,"Los datos se guardaron correctamente");
        }
 
    } catch (SQLException ex) {
        Logger.getLogger(CajaAd.class.getName()).log(Level.SEVERE, null, ex);
    }
}
 
void detallefactura(){
    for(int i=0;i<tablaCaja.getRowCount();i++) {
    String SQL="INSERT INTO detalle_registro(num_fac,cod_pro,des_pro,cant_pro,pre_unit,pre_tot) VALUES (?,?,?,?,?,?)";
 
    String numbol=numFac.getText();
    String codpro=tablaCaja.getValueAt(i, 0).toString();
    String despro=tablaCaja.getValueAt(i, 1).toString();
    String cantpro=tablaCaja.getValueAt(i, 3).toString();
    String preunit=tablaCaja.getValueAt(i, 2).toString();
    String importe=tablaCaja.getValueAt(i, 4).toString();
 
    try {
        PreparedStatement pst = cn.prepareStatement(SQL);
        pst.setString(1,numbol);
        pst.setString(2,codpro);
        pst.setString(3,despro);
        pst.setString(4,cantpro);
        pst.setString(5,preunit);
        pst.setString(6,importe);
 
        pst.executeUpdate();
 
 
    } catch (SQLException ex) {
        Logger.getLogger(CajaAd.class.getName()).log(Level.SEVERE, null, ex);
    }
}}


Este es el botón de Realizar Venta que está en la clase Ventas:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private void venderActionPerformed(java.awt.event.ActionEvent evt) {
    if (tablaCaja.getRowCount() < 1) {
        JOptionPane.showMessageDialog(this, "Imposible realizar venta.", "Error", JOptionPane.ERROR_MESSAGE);
    } else {
        VentasCod vc = new VentasCod();
        vc.setPrimaryKey(numFac.getText());
        vc.setTotal(total.getText());
        vc.setFecha(id.getText());
        int opcion = OpcionesVen.registrar(vc);
        if (opcion != 0) {
            factura();
            detallefactura();
            limpiaCampos();
            JOptionPane.showMessageDialog(this, "Venta realizada.", "Caja de cobro", 0,
                    new ImageIcon(getClass().getResource("/imagenes/caja/realizada.png")));
            if (principal.MenuPrincipalAd.cerra1) {
                OpcionesVen.listar("");
            }
        }
    }
}

y al ejecutar, me muestra el siguiente error:


Captura-de-pantalla-18

Cómo lo puedo solucionar?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Franklin
Val: 456
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

MOSTRAR DATOS DE UN JTABLE EN OTRO JFRAME

Publicado por Franklin (179 intervenciones) el 05/05/2020 14:19:32
en teoría te dice que cod_cli no puede ser null en el metodo factura()

String codcli=id.getText()

cuando creas la variable esa caja de texto o Label (id) tiene algún valor?

o podrías hacer lo siguiente

1
String codcli=id.getText() == nul ? "textoEncasoSEAnull" : id.getText();

quizás tambien por la longitud de su texto

1
String codcli=id.getText().lenght() < 1 ? "textoEncasoSEAnull" : id.getText();
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandra
Val: 31
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

MOSTRAR DATOS DE UN JTABLE EN OTRO JFRAME

Publicado por Alejandra (17 intervenciones) el 05/05/2020 15:18:55
Buen día Franklin, si tiene un valor que es el id que capturo de la tabla Clientes cuando hago clic en alguna fila de la tabla...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Franklin
Val: 456
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

MOSTRAR DATOS DE UN JTABLE EN OTRO JFRAME

Publicado por Franklin (179 intervenciones) el 05/05/2020 17:18:42
imprime su valor luego de crear la variable para ver su contenido, ya que en la base de datos dicho valor esta marcado como NN(not null) te marca el error.

es un Primary Key?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandra
Val: 31
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

MOSTRAR DATOS DE UN JTABLE EN OTRO JFRAME

Publicado por Alejandra (17 intervenciones) el 08/05/2020 02:09:41
Buenas noches Franklin, si es un Primary Key en la tabla Clientes...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar