Resultados 1 al 8 de 8

Tema: Java - Pasar de un jTable a otro?

  1. #1
    Usuario Avatar de nkdos
    Fecha de ingreso
    27 mar, 09
    Ubicación
    maipU
    Mensajes
    362

    Java - Pasar de un jTable a otro?

    Les cuento, resulta que estoy haciendo una aplicación en la que tengo un JDialog el cual tiene un JTable que me muestra datos desde una DB Mysql. (funciona todo correcto)

    Resulta que en el JFrame tengo otro JTable, lo que quiero que al hacer click en un elemento del JTable del JDialog y hacer click en el boton "traspasar" se me pase ese dato al JTable del JFrame y que este lo pueda ver automáticamente.

    De que forma lo tendría que hacer?

    Por si me explique un poco enredado, lo que quiero lograr es algo como esto: [ame=http://www.youtube.com/watch?v=xgwow9ogab0&feature=related]JTable Demo - Database Searching and Adding - YouTube[/ame]
    VISITA Y HAZTE SEGUIDOR DE MI BLOG INFORMÁTICO...CLIC AQUÍ...

  2. #2
    Arquitecto J2EE *WIP* :D Avatar de Arth
    Fecha de ingreso
    10 mar, 11
    Ubicación
    Santiago, Chile
    Mensajes
    62

    Re: Java - Pasar de un jTable a otro?

    Holas,

    Mira, de Swing no me acuerdo mucho, pero por lo que vi, puedes usar lo siguiente:

    En JTable, existe el método "getSelectedRow" que te retorna el número de fila seleccionada. Con esto ya tienes identificada la fila.

    El paso siguiente, es obtener los datos de la fila, esto lo puedes realizar mediante el método "getModel" que retorna el TableModel que representa los datos del JTable.

    Teniendo el TableModel y el número de fila, te queda obtener los datos de la fila, esto lo puedes realizar con el método "getValueAt" del TableModel, pero tendrás que invocarlo por cada columna de la fila, sería algo como esto

    Código:
    TableModel model = jtable.getModel();
    int selectedRow = jtable.getSelectedRow();
    
    // Supongamos que es un JTable de 3 columnas
    String columna1 = (String) model.getValueAt(selectedRow, 0);
    String columna2 = (String) model.getValueAt(selectedRow, 1);
    String columna3 = (String) model.getValueAt(selectedRow, 2);
    
    // Puedes agrupar los tres valores en un objeto para mayor claridad del código
    FilaTabla fila = new FilaTabla();
    fila.setColumna1(columna1);
    fila.setColumna2(columna2);
    fila.setColumna3(columna3);
    De ahí, solo te queda pasar la instancia de la clase "FilaTabla" hacia el otro JTable y agregar los datos.

    Todo esto deberías realizarlo en el actionPerformed del botón que agrega las filas, si quieres agregar más de una fila seleccionada, tendrías que utilizar el método "getSelectedRows" de JTable que retorna un array de int[], e iterarlo haciendo lo mismo

    Espero que sea de ayuda.

    Saludos

  3. #3
    Usuario Avatar de nkdos
    Fecha de ingreso
    27 mar, 09
    Ubicación
    maipU
    Mensajes
    362

    Re: Java - Pasar de un jTable a otro?

    Primero que nada gracias. Por lo que capte, lo necesario es:

    Código:
    TableModel model = jtable.getModel();
    int selectedRow = jtable.getSelectedRow();
    
    String columna1 = (String) model.getValueAt(selectedRow, 0);
    Y de forma opcional:

    Código:
    FilaTabla fila = new FilaTabla();
    fila.setColumna1(columna1);
    El problema que me nace, es que me cuesta entender la lógica para enviar la información de un JDialog a un JFrame, ya que siempre he trabajado dentro de lo mismo, por ejemplo, para listar la tabla cliente y poder clickear una fila y eliminar el registro tengo:

    ControlListProd
    Código:
    public void actionPerformed(ActionEvent e) {
            String boton = e.getActionCommand();
    
            if(boton.equalsIgnoreCase("Eliminar")){
                int indexFila = tabla.getSelectedRow();
    
                Object obj = tabla.getModel().getValueAt(indexFila, 0);
    
                Cliente cliente = new Cliente();
                cliente.setRut(obj.toString());
    
                boolean resp = EntityCliente.deleteCliente(cliente, conn);
    
                if(resp == true){
                    JOptionPane.showMessageDialog(null, "Registro eliminado con exito", 
                            "Eliminación de datos", JOptionPane.INFORMATION_MESSAGE);
                }else{
                    JOptionPane.showMessageDialog(null, "Error" +" "+ e +" "+ "Al eliminar cliente", 
                            "Eliminación de datos", JOptionPane.ERROR_MESSAGE);
                }
    
                DefaultTableModel model = (DefaultTableModel)tabla.getModel();
    
                model.removeRow(indexFila);
            }
    guiDelCli
    Código:
    public DefaultTableModel getTableModel(){
            DefaultTableModel model = new DefaultTableModel();
            
            model.addColumn("RUT");
            model.addColumn("Nombre");
            model.addColumn("Dirección");
    
            ArrayList arrFilasProd = ControlListCli.getCliente(conn);
            Iterator it = arrFilasProd.iterator();
    
            while (it.hasNext()) {
                Object object = it.next();
    
                Object[] datos = (Object[])object;
    
                model.addRow(datos);
            }
    
            return model;
        }
    
    Private void initComponents() {
            ControlListCli control = new ControlListCli(jTable1, conn);
            jButton1.addActionListener(control);
            
            //Resto código
      }
    Mi gran problema como mencione antes, es trabajar dentro de la clase y a la vez enviarlo a la otra clase que contiene el otro jTable
    VISITA Y HAZTE SEGUIDOR DE MI BLOG INFORMÁTICO...CLIC AQUÍ...

  4. #4
    Arquitecto J2EE *WIP* :D Avatar de Arth
    Fecha de ingreso
    10 mar, 11
    Ubicación
    Santiago, Chile
    Mensajes
    62

    Re: Java - Pasar de un jTable a otro?

    Ah vale, mira para pasar la info de un JTable al otro tienes varias alternativas, igual depende mucho como tienes implementados el JFrame y el JDialog.

    Una forma rápida que se me ocurre para hacer esto, es que en vez de usar directamente un JDialog, podrías crear una clase que extienda JDialog (por ejemplo "public class MiJDialog extends JDialog").

    En esta nueva clase, implementas un nuevo constructor que use el que ya utilizas para crear la instancia del JDialog, la diferencia en que en este también pasas la instancia del JFrame. Teniendo una referencia al JFrame dentro del JDialog, ya empiezas a tener un punto de entrada para pasar los datos.

    Igual, si me mostraras como implementas la instancia del JFrame y el JDialog, podría darte algo mas concreto como solución.

    Saludos

  5. #5
    Usuario Avatar de nkdos
    Fecha de ingreso
    27 mar, 09
    Ubicación
    maipU
    Mensajes
    362

    Re: Java - Pasar de un jTable a otro?

    Okey, mira te muestro el código, literalmente tengo la interfaz grafica en una clase, la conexión a la db en otra y el control de botones y eso en otra.

    GUI_PRINCIPAL: Aquí tengo instanciado el JTable que quiero que reciba los datos.

    Código:
    package com.sv.gui;
    
    import com.sv.control.ControlPrincipal;
    import com.sv.jdbc.ConnectorJDBC;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import javax.swing.JFrame;
    import javax.swing.table.DefaultTableModel;
    
    public class guiPrincipal extends JFrame {
        
        //Instanciamos los elementos que queremos
        private javax.swing.JMenu jMenu1;
        private javax.swing.JMenu jMenuAdd;
        private javax.swing.JMenuItem jMenuAddCliente;
        private javax.swing.JMenuItem jMenuAddProducto;
        private javax.swing.JMenu jMenuAyuda;
        private javax.swing.JMenuBar jMenuBar1;
        private javax.swing.JMenuItem jMenuItem1;
        private javax.swing.JMenuItem jMenuItem2;
        private javax.swing.JMenu jMenuList;
        private javax.swing.JMenuItem jMenuListCliente;
        private javax.swing.JMenuItem jMenuListProducto;
        private javax.swing.JMenuItem jMenuPrograma;
        private javax.swing.JMenuItem jMenuProgramador;
        private javax.swing.JScrollPane jScrollPane1;
        private javax.swing.JTable jTable1;
        private javax.swing.JButton jbtAgregar;
        private javax.swing.JButton jbtCancelar;
        private javax.swing.JButton jbtGenerar;
        private javax.swing.JLabel jlblFecha;
        private javax.swing.JLabel jlblTotal;
        private javax.swing.JTextField jtxtTotal;
        private javax.swing.JButton jbtQuitar;
        private ConnectorJDBC conn;    
    
        public guiPrincipal(ConnectorJDBC conn){
            //super("Menú de ppciones");
            this.conn = conn;
            initComponents(); //Iniciamos el método initComponents
            setVisible(true);
            setLocationRelativeTo(null);
        }
    
        public DefaultTableModel getTableModel(){
            
            DefaultTableModel model = new DefaultTableModel();
            
            model.addColumn("ID");
            model.addColumn("Producto");
            model.addColumn("Precio");
    
            return model;
        }
        
        private void initComponents() {
    
            //Objetos del JFrame
            jlblFecha = new javax.swing.JLabel();
            jScrollPane1 = new javax.swing.JScrollPane();
            jTable1 = new javax.swing.JTable();
            jtxtTotal = new javax.swing.JTextField();
            jlblTotal = new javax.swing.JLabel();
            jbtGenerar = new javax.swing.JButton();
            jbtCancelar = new javax.swing.JButton();
            jbtAgregar = new javax.swing.JButton();
            jMenuBar1 = new javax.swing.JMenuBar();
            jMenuAdd = new javax.swing.JMenu();
            jMenuAddCliente = new javax.swing.JMenuItem();
            jMenuAddProducto = new javax.swing.JMenuItem();
            jMenuList = new javax.swing.JMenu();
            jMenuListCliente = new javax.swing.JMenuItem();
            jMenuListProducto = new javax.swing.JMenuItem();
            jMenu1 = new javax.swing.JMenu();
            jMenuItem1 = new javax.swing.JMenuItem();
            jMenuItem2 = new javax.swing.JMenuItem();
            jMenuAyuda = new javax.swing.JMenu();
            jMenuPrograma = new javax.swing.JMenuItem();
            jMenuProgramador = new javax.swing.JMenuItem();
            jbtQuitar = new javax.swing.JButton();
    
            //Propiedades del JFrame
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            setResizable(false);
            
            //Instanciar control de acciones
            ControlPrincipal ctrlprin = new ControlPrincipal(this, conn);
            
            //Obtener fecha del sistema
            Date date = new Date();
            SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
            String cadenaFecha = formato.format(date);
            
            jlblFecha.setText(cadenaFecha); //Mostrar Fecha del sistema
    
            jTable1.setModel(new javax.swing.table.DefaultTableModel(
                new Object [][] {
                    {null, null, null},
                    {null, null, null},
                    {null, null, null},
                    {null, null, null}
                },
                new String [] {
                    "ID", "Nombre", "Precio"
                }
            ));
            jScrollPane1.setViewportView(jTable1);
    
            //jTextField Total
            jtxtTotal.setEditable(false);
            jlblTotal.setText("Total:");
    
            //Botones
            jbtGenerar.setText("Generar Compra");
            jbtCancelar.setText("Cancelar");
            jbtAgregar.setText("Agregar");
            jbtQuitar.setText("Quitar");
            
            //ActionListenerBotones
            jbtAgregar.addActionListener(ctrlprin);
    
            //Menús
            jMenuAdd.setText("Agregar");
                jMenuAddCliente.setText("Agregar Cliente");
                    jMenuAddCliente.addActionListener(ctrlprin);
                    jMenuAdd.add(jMenuAddCliente);
                jMenuAddProducto.setText("Agregar Producto");
                    jMenuAddProducto.addActionListener(ctrlprin);
                    jMenuAdd.add(jMenuAddProducto);
            jMenuBar1.add(jMenuAdd);
    
            jMenuList.setText("Listar");
                jMenuListCliente.setText("Listar Cliente");
                     jMenuListCliente.addActionListener(ctrlprin);
                     jMenuList.add(jMenuListCliente);
                     
                jMenuListProducto.setText("Listar Producto");
                    jMenuListProducto.addActionListener(ctrlprin);
                    jMenuList.add(jMenuListProducto);
                    
            jMenuBar1.add(jMenuList);
    
            jMenu1.setText("Eliminar");
                jMenuItem1.setText("Eliminar Cliente");
                    jMenuItem1.addActionListener(ctrlprin);
                    jMenu1.add(jMenuItem1);
                jMenuItem2.setText("Eliminar Producto");
                    jMenuItem2.addActionListener(ctrlprin);
                    jMenu1.add(jMenuItem2);
            jMenuBar1.add(jMenu1);
    
            jMenuAyuda.setText("Ayuda");
                jMenuPrograma.setText("Sobre el programa");
                    jMenuPrograma.addActionListener(ctrlprin);
                    jMenuAyuda.add(jMenuPrograma);
                jMenuProgramador.setText("Sobre el programador");
                    jMenuProgramador.addActionListener(ctrlprin);
                    jMenuAyuda.add(jMenuProgramador);
            jMenuBar1.add(jMenuAyuda);
    
            setJMenuBar(jMenuBar1);
    
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 562, Short.MAX_VALUE)
                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                .addComponent(jbtCancelar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(jbtAgregar, javax.swing.GroupLayout.DEFAULT_SIZE, 111, Short.MAX_VALUE))
                            .addGap(18, 18, 18)
                            .addComponent(jbtQuitar, javax.swing.GroupLayout.PREFERRED_SIZE, 118, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 112, Short.MAX_VALUE)
                            .addComponent(jlblTotal, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGap(18, 18, 18)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                .addComponent(jbtGenerar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(jtxtTotal, javax.swing.GroupLayout.DEFAULT_SIZE, 137, Short.MAX_VALUE)))
                        .addComponent(jlblFecha, javax.swing.GroupLayout.Alignment.TRAILING))
                    .addContainerGap())
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jlblFecha)
                    .addGap(18, 18, 18)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 202, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(18, 18, 18)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(jtxtTotal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(jlblTotal))
                            .addGap(18, 18, 18)
                            .addComponent(jbtGenerar))
                        .addGroup(layout.createSequentialGroup()
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(jbtAgregar)
                                .addComponent(jbtQuitar))
                            .addGap(18, 18, 18)
                            .addComponent(jbtCancelar)))
                    .addContainerGap(14, Short.MAX_VALUE))
            );
    
            pack();
        }
    }
    CONTROLPRINCIPAL: Es el control de la clase anterior

    Código:
    package com.sv.control;
    
    import com.sv.gui.guiAddCli;
    import com.sv.gui.guiAddProd;
    import com.sv.gui.guiDelCli;
    import com.sv.gui.guiDelProd;
    import com.sv.gui.guiListCli;
    import com.sv.gui.guiListProd;
    import com.sv.gui.guiPrincipal;
    import com.sv.gui.guiVenta;
    import com.sv.jdbc.ConnectorJDBC;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JOptionPane;
    
    public class ControlPrincipal implements ActionListener{
        
        private guiPrincipal guiprincipal;
        private ConnectorJDBC conn;
        
        public ControlPrincipal(guiPrincipal guiprincipal, ConnectorJDBC conn){
            this.guiprincipal = guiprincipal;
            this.conn = conn;
        }
        
    
        @Override
        public void actionPerformed(ActionEvent e) {
            String boton = e.getActionCommand();
            
            if(boton.equalsIgnoreCase("Agregar")){
                guiVenta guiventa = new guiVenta(guiprincipal, conn);
            }      
            else if(boton.equalsIgnoreCase("Agregar Producto")){
                guiAddProd guiaddprod = new guiAddProd(guiprincipal, conn);
            }
            else if(boton.equalsIgnoreCase("Agregar Cliente")){
                guiAddCli guiaddcli = new guiAddCli(guiprincipal, conn);
            }
            else if(boton.equalsIgnoreCase("Listar Producto")){
                guiListProd guilistprod = new guiListProd(guiprincipal, conn);
            }
            else if(boton.equalsIgnoreCase("Listar Cliente")){
                guiListCli guilistcli = new guiListCli(guiprincipal, conn);
            }
            else if(boton.equalsIgnoreCase("Eliminar Producto")){
                guiDelProd guidelprod = new guiDelProd(guiprincipal, conn);
            }
            else if(boton.equalsIgnoreCase("Eliminar Cliente")){
                guiDelCli guidelcli = new guiDelCli(guiprincipal, conn);
            }
        }
    }
    GUIVENTA: Aqui es donde me lista en un JTable los productos de la base de datos.

    Código:
    package com.sv.gui;
    
    import com.sv.control.ControlListProd;
    import com.sv.jdbc.ConnectorJDBC;
    import java.util.ArrayList;
    import java.util.Iterator;
    import javax.swing.JDialog;
    import javax.swing.table.DefaultTableModel;
    
    public final class guiVenta extends JDialog{
    
        private javax.swing.JScrollPane jScrollPane1;
        private javax.swing.JTable jTable1;
        private javax.swing.JButton jbtAgregar;
        private javax.swing.JButton jbtBuscar;
        private javax.swing.JTextField jtxtBuscar;
        private ConnectorJDBC conn;
    
        public guiVenta(guiPrincipal guiPrincipal, ConnectorJDBC conn) {
            this.conn = conn;
            initComponents();
            setVisible(true);
            setResizable(false);
        }
        
        public DefaultTableModel getTableModel(){
            DefaultTableModel model = new DefaultTableModel(); //Instanciación DefaultTableModel
            
            //Nombre de las columnas del JTable
            model.addColumn("ID");
            model.addColumn("Nombre");
            model.addColumn("Precio");
    
            ArrayList arrFilasProd = ControlListProd.getProducto(conn);
            Iterator it = arrFilasProd.iterator();
    
            while (it.hasNext()) {
                Object object = it.next();
                Object[] datos = (Object[])object;
                model.addRow(datos);
            }
    
            return model;
        }
    
        private void initComponents() {
    
            jtxtBuscar = new javax.swing.JTextField();
            jbtBuscar = new javax.swing.JButton();
            jScrollPane1 = new javax.swing.JScrollPane();
            jTable1 = new javax.swing.JTable();
            jbtAgregar = new javax.swing.JButton();
    
            //Atributos del JDialog
            setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
            setTitle("Sistema de venta");
            setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
            setMinimumSize(new java.awt.Dimension(515, 4));
            setResizable(false);
    
            //Instanciación ActionListener
            ControlListProd control = new ControlListProd(jTable1, conn);
            jTable1.getModel().addTableModelListener(control);
            
            //Botones
            jbtBuscar.setText("Buscar");
            jbtAgregar.setText("Agregar");
            
            jTable1.setModel(getTableModel());
            jScrollPane1.setViewportView(jTable1);
    
            
            
            //Ubicación de elementos en la interfaz.
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(12, 12, 12)
                    .addComponent(jtxtBuscar, javax.swing.GroupLayout.PREFERRED_SIZE, 364, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(32, 32, 32)
                    .addComponent(jbtBuscar, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGroup(layout.createSequentialGroup()
                    .addGap(12, 12, 12)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 485, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGroup(layout.createSequentialGroup()
                    .addGap(12, 12, 12)
                    .addComponent(jbtAgregar, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE))
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(13, 13, 13)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                            .addGap(1, 1, 1)
                            .addComponent(jtxtBuscar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addComponent(jbtBuscar))
                    .addGap(18, 18, 18)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 275, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(18, 18, 18)
                    .addComponent(jbtAgregar))
            );
    
            pack();
        }
    }
    CONTROLVENTA: Es el control de los elementos de la clase anterior. Cabe destacar que la uso tanto para listar, como para "hacer click en una fila, luego click en boton eliminar y eliminar un producto" no tengo implementado la opción de traspasar a la otra tabla o de insertar.

    Código:
    package com.sv.control;
    
    import com.sv.clases.Producto;
    import com.sv.jdbc.*;
    import java.awt.event.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.table.*;
    
    public class ControlListProd implements ActionListener,TableModelListener{
        
        private JTable tabla;
        private ConnectorJDBC conn;
    
        public ControlListProd(JTable tabla, ConnectorJDBC conn) {
            this.tabla = tabla;
            this.conn = conn;
        }
    
        public static ArrayList getProducto(ConnectorJDBC conn){
            return EntityProducto.getProductos(conn);
        }
    
         public void actionPerformed(ActionEvent e) {
            String boton = e.getActionCommand();
    
            DefaultTableModel model = (DefaultTableModel)tabla.getModel();
            
            if(boton.equalsIgnoreCase("Eliminar")){
                int indexFila = tabla.getSelectedRow();
    
                Object obj = tabla.getModel().getValueAt(indexFila, 0).toString();
    
                Producto prod = new Producto();
                prod.setID(obj.toString());
                
                boolean resp = EntityProducto.deleteProducto(prod, conn);
    
                model.removeRow(indexFila);
                
                if(resp == true){
                    JOptionPane.showMessageDialog(null, "Registro eliminado con exito", 
                            "Eliminación de datos", JOptionPane.INFORMATION_MESSAGE);
                }else{
                    JOptionPane.showMessageDialog(null, "Error" +" "+ e +" "+ "Al eliminar producto", 
                            "Eliminación de datos", JOptionPane.ERROR_MESSAGE);
                }
            }
        }
    
        public void tableChanged(TableModelEvent e) {
            int tipo = e.getType();
    
            if(tipo == TableModelEvent.UPDATE){
    
                int indiceFila = tabla.getSelectedRow();
    
                Object objActual = tabla.getModel().getValueAt(indiceFila, 0);
    
                if(objActual instanceof Producto){
                    Producto prod = (Producto)objActual;
    
                    prod.setNombre((String)tabla.getModel().getValueAt(indiceFila, 1));
                    prod.setPrecio((String)tabla.getModel().getValueAt(indiceFila, 2));
    
                    boolean resp = EntityProducto.updateProducto(prod, conn);
    
                    if(resp == true){
                        System.out.println("REGISTRO ACTUALIZADO CON EXITO");
                    }else{
                        System.out.println("ERROR EL ACTUALIZAR REGISTRO");
                    }
                }else{
                    System.out.println("NO SE PERMITE CAMBIA EL ID DE PRODUCTO!");
                }
            }
        }
    }
    VISITA Y HAZTE SEGUIDOR DE MI BLOG INFORMÁTICO...CLIC AQUÍ...

  6. #6
    Arquitecto J2EE *WIP* :D Avatar de Arth
    Fecha de ingreso
    10 mar, 11
    Ubicación
    Santiago, Chile
    Mensajes
    62

    Re: Java - Pasar de un jTable a otro?

    Perfecto, ahora si tengo claro el contexto.

    Puedes aprovechar que en el constructor del guiVenta pasas la instancia del guiPrincipal, con eso ya tienes una parte del trabajo hecho.

    Lo primero que tienes que hacer, es implementar un método en el guiPrincipal, que reciba como parámetro los datos de la fila que quieres agregar al JTable del guiPrincipal (que según tu código, debería ser un objeto de tipo Producto), supongamos que el método se llama "agregarProducto(Producto prod)", dentro del método tendrías que realizar el procedimiento para manipular el JTable y agregarle los datos.

    El siguiente paso, es hacer que el constructor del guiVenta asigne la instancia del guiPrincipal a un atributo, algo como esto:
    Código:
        private guiPrincipal ownerGui; // declarar atributo
    
        public guiVenta(guiPrincipal guiPrincipal, ConnectorJDBC conn) {
            this.conn = conn;
            this.ownerGui = guiPrincipal; // asignar referencia a guiPrincipal
            initComponents();
            setVisible(true);
            setResizable(false);
        }
    Lo que sigue, es modificar el constructor de la clase ControlListProd, tienes que agregarle como argumento un objeto de tipo guiPrincipal:
    Antes:
    Código:
        public ControlListProd(JTable tabla, ConnectorJDBC conn) {
            this.tabla = tabla;
            this.conn = conn;
        }
    Después:
    Código:
        private guiPrincipal targetGui; // declarar atributo
    
        public ControlListProd(JTable tabla, ConnectorJDBC conn, guiPrincipal gui) {
            this.tabla = tabla;
            this.conn = conn;
            this.targetGui = gui;
        }
    Una vez hecho eso, tienes que utilizar el constructor modificado, simplemente agregando la referencia al guiPrincipal que tienes en el guiVenta al momento de crear la instancia del ControlListProd

    Antes:
    Código:
            //Instanciación ActionListener
            ControlListProd control = new ControlListProd(jTable1, conn);
    Después:
    Código:
            //Instanciación ActionListener
            ControlListProd control = new ControlListProd(jTable1, conn, ownerGui);
    Ya teniendo todos estos requisitos implementados, lo único que queda por hacer, es implementar en el ActionPerfomed (supongo que en un nuevo if que represente otro botón), la invocación al método "agregarProducto" de la referencia al targetGui.

    Algo como:
    Código:
            targetGui.agregarProducto(producto);
    Y eso sería ojalá que te haya quedado claro

    Un par de recomendaciones adicionales, los nombres de las clases siempre empiezan con mayúsculas, no así las variables, métodos regulares y atributos. Y lo otro que quizás en estos momentos no sea tan importante, el manejo de conexiones a BDD debe ser realizado con cuidado, ideal es que se realice la conexión inmediatamente antes a utilizarla, y una vez ya utilizada (es decir, una vez que ya realizaste la consulta a la BDD) se debe cerrar en conjunto con todos los recursos empleados (PreparedStatements, ResultSets...), esto quizás no sea tan importante para una aplicación básica, pero en aplicaciones de alta concurrencia (muchos usuarios utilizandola simultaneamente) es importantísimo .

    Suerte!

  7. #7
    Usuario Avatar de nkdos
    Fecha de ingreso
    27 mar, 09
    Ubicación
    maipU
    Mensajes
    362

    Re: Java - Pasar de un jTable a otro?

    Nuevamente gracias por tu ayuda, sabes he seguido todo al pie de la letra, no tengo problemas de compilación, pero si tengo problemas de ejecución :S Tengo lo siguiente:

    Clase control:

    Código:
    if(boton.equalsIgnoreCase("Agregar")){
                int indexFila = tabla.getSelectedRow();
    
                String v1 = (String) tabla.getModel().getValueAt(indexFila, 0);
                String v2 = (String) tabla.getModel().getValueAt(indexFila, 1);
                String v3 = (String) tabla.getModel().getValueAt(indexFila, 2); 
    
                String[] fila = new String [] {v1, v2, v3};
    
                //Object[] obj = (Object[])obj;
                //Producto prod = new Producto();
                //prod.setID(obj.toString());
                
                targetGui.agregarProducto(fila);
            }
    Y la gui:

    Código:
        public DefaultTableModel agregarProducto(String[] fila) {
            DefaultTableModel model = new DefaultTableModel();
            
            model.addRow(fila);
            return model;
        }
    El problema que me tira un error:

    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at control.ControlListProd.actionPerformed(ControlLis tProd.java:74)
    Y si veo la línea 74 es: targetGui.agregarProducto(fila);

    Gracias al Netbeans hice un debug, y por lo que pude darme cuenta (si no me equivoco) es que va todo bien, pero en la linea targetGui.agregarProducto(fila); me apunto a un valor nulo y no se porque :S
    VISITA Y HAZTE SEGUIDOR DE MI BLOG INFORMÁTICO...CLIC AQUÍ...

  8. #8
    Arquitecto J2EE *WIP* :D Avatar de Arth
    Fecha de ingreso
    10 mar, 11
    Ubicación
    Santiago, Chile
    Mensajes
    62

    Re: Java - Pasar de un jTable a otro?

    hmmm, evidentemente, "targetGui" está nulo.

    Debes fijarte en que punto esa instancia queda null, podría ser en...

    Clase guiPrincipal -> ControlPrincipal ctrlprin = new ControlPrincipal(*this*, conn);
    Clase ControlPrincipal -> guiVenta guiventa = new guiVenta(*guiprincipal*, conn);
    Clase guiVenta -> ControlListProd control = new ControlListProd(jTable1, conn, *ownerGui*);

    O en una de esas se te olvidó implementar alguno de los pasos, revisa las líneas que te indiqué.

    Saludos

LinkBacks (?)

  1. 12/10/2012, 20:42
  2. 11/05/2012, 11:34

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  
*