Ayuda con 2 JTables

Publicado en 'Programación' por celsoxvi, 2 Dic 2011.





  1. celsoxvi

    celsoxvi Miembro de bronce

    Registro:
    1 Mar 2009
    Mensajes:
    1,196
    Likes:
    72




    Hola Comunidad;

    Tengo un Problema Desde hace un par de Horas que no Logro Solucionar, Es lo Siguiente.

    Tengo una Tabla A y una Tabla B, La Tabla A se llena con un ResultSet y en la Tabla B se va Agregando los Productos que hay en la Tabla A, La Idea es Sencilla, una Vez que se haga Click en el Botón Agregar Pasa el Producto De La Tabla A a la Tabla B, y que el Producto Pasado ya no se Muestre en la Tabla A. Lo he Tratado de Hacer

    PHP:
    private void Redibujar() { 
            
    ResultSet Resultado
            
    MySQL ClaseMySQL = new MySQL(); 
            
    ClaseMySQL.EstablecerConexion(); 
            try { 
                
    Resultado ClaseMySQL.Consulta("SELECT p.productoID,p.nombre,p.numeroexisten,p.costoventa FROM vista_productos p"); 

                while (
    Resultado.next()) { 

                    for (
    int i 0jtblDetalleBoleta.getRowCount(); i++) { 
                        if (
    Integer.parseInt(String.valueOf(jtblDetalleBoleta.getValueAt(i0))) != Resultado.getInt(1)) { 
                            
    Object Datos[] = new Object[4]; 
                            for (
    int j 0Datos.lengthj++) { 
                                
    Datos[j] = Resultado.getObject(1); 
                            } 
                            
    modelojtblBusquedaRapida.addRow(Datos); 
                        } 

                    } 
                } 
            } catch (
    SQLException ex) { 
                
    JOptionPane.showMessageDialog(nullex); 
            } 
        }  
    Es la Primera vez que quiero hacer esto, Espero su pronta Ayuda.
     


  2. EruKun

    EruKun Miembro maestro

    Registro:
    15 Nov 2008
    Mensajes:
    254
    Likes:
    10
    el código de esto modelojtblBusquedaRapida? o es un JTable el B ?
     
  3. celsoxvi

    celsoxvi Miembro de bronce

    Registro:
    1 Mar 2009
    Mensajes:
    1,196
    Likes:
    72
    Trabajo con el modelojtblBusquedaRapida para agregar los Datos.
     
  4. kevien_fox

    kevien_fox Miembro nuevo

    Registro:
    2 Dic 2011
    Mensajes:
    15
    Likes:
    2
    el manejo de JTable se usa con matrices (Object [][]) se puede usar con un vector (Object []) para adicionar a la tabla con addRow, pero no guarda los datos en una matriz.

    para que guardes tus datos sería algo así:

    for (int j=0; j<MiTabla[0].length; j++)
    MiTabla[MiTabla.length][j]=Datos[j];

    ahi estaría guardando todos tus datos en una matriz y para aplicarlo a la visualizacion te ayudas con un DefautlTableModel mdTabla.


    mdTabla.setDataVector(MiTabla,columna)
    // donde columna es un vector String de cabezeras. ejemp: "String []columna={"Nombre","apellidos",...}";

    OJO: tienes que usar una matriz temporal porque a medida que va a guardando pasa los datos a ese temporal y luego se redimenciona la tabla.

    Salu2
     
    Última edición: 2 Dic 2011
  5. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    Hola. Una forma es capturar la fila seleccionada cuando hagas click en el botón agregar, para ello utlizarías el método getSelectedRow() del primer JTable. Seguidamente verificas si hay alguna fila seccionada (!= -1), si es verdadero, procedes a agregarla al segundo JTable mediante el método addRow() de su modelo y para eliminarlo del primer JTable, análogamente existe un método removeRow() pero aplicado al modelo del primer JTable.
    Te postero un pequeño ejemplo de cómo hacerlo.
    Código:
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.table.*;
    public class TestJTable extends JFrame
    {
     private JTable jTabla1, jTabla2;
     private DefaultTableModel modelo1, modelo2;
     private JButton btnAgregar, btnEliminar;
     public TestJTable()
     {
      setTitle("Test de JTable");
      setSize(540, 300);
      initComponents();
      addListeners();
     }
     private void initComponents()
     {
      btnAgregar = new JButton("Agregar");
      btnEliminar =  new JButton("Eliminar");
      Object[][] datos = new Object[][] {
       {"001", "Leche Muuu", new Integer(100), new Double(2.10)},
       {"002", "Pañal Jaimito", new Integer(50), new Double(2.00)},
       {"003", "Gaseosa Kola loca 1L", new Integer(100), new Double(3.5)},
       {"004", "Yogurt Fresh 1L", new Integer(25), new Double(4.5)}
      };
      // Cabecera para las columnas de jTabla1
      String[] cabeceras = new String[] {
       "Cód Prod", "Descripción", "Stock", "Prec. Unitario"
      };
      jTabla1 = new JTable();
      JScrollPane desplazador1 = new JScrollPane(jTabla1);
      modelo1 = new DefaultTableModel(datos, cabeceras) {
       Class[] tipoColumna = {String.class, String.class, Integer.class, Double.class};
       boolean[] editColumna = {false, true, false, false};
       public Class getColumnClass(int indColumn)
       {
        return tipoColumna[indColumn];
       }
       public boolean isCellEditable(int indFila, int indColumna)
       {
        return editColumna[indColumna];
       }
      };
      jTabla1.setModel(modelo1);
      Object[][] datos2 = new Object[][]{};
      jTabla2 = new JTable(datos2, cabeceras);
      JScrollPane desplazador2 = new JScrollPane(jTabla2);
      modelo2 = new DefaultTableModel(datos2, cabeceras);
      jTabla2.setModel(modelo2);
      Container contenedor = getContentPane();
      contenedor.setLayout(null);
      desplazador1.setBounds(10, 10, 400, 100);
      btnAgregar.setBounds(420, 10, 100, 20);
      desplazador2.setBounds(10, 150, 400, 100);
      btnEliminar.setBounds(420, 150, 100, 20);
      contenedor.add(desplazador1);
      contenedor.add(btnAgregar);
      contenedor.add(desplazador2);
      contenedor.add(btnEliminar);
     }
     private void formWindowClosing(WindowEvent evt)
     {
      System.exit(0);
     }
     private void addListeners()
     {
      addWindowListener(new WindowAdapter()
      {
       public void windowClosing(WindowEvent evt)
       {
        formWindowClosing(evt);
       }
      });
      ActionListener al = new ActionListener()
      {
       public void actionPerformed(ActionEvent evt)
       {
        JButton btnClick = (JButton)evt.getSource();
        if (btnClick == btnAgregar)
         btnAgregarActionPerformed(evt);
        else
         btnEliminarActionPerformed(evt);
       }
      };
      btnAgregar.addActionListener(al);
      btnEliminar.addActionListener(al);
     }
     private void btnAgregarActionPerformed(ActionEvent evt)
     {
      int fila = jTabla1.getSelectedRow();
      if (fila != -1) {
       int nColumns = jTabla1.getColumnCount();
       Object[] filaSeleccionada = new Object[nColumns];
       for (int i = 0; i < filaSeleccionada.length; ++i)
        filaSeleccionada[i] = modelo1.getValueAt(fila, i);
       modelo2.addRow(filaSeleccionada);
       modelo1.removeRow(fila);
      }
      else
       JOptionPane.showMessageDialog(this, "No hay registro seleccionado");
     }
     private void btnEliminarActionPerformed(ActionEvent evt)
     {
      int fila = jTabla2.getSelectedRow();
      if (fila != -1) {
       int nColumns = jTabla2.getColumnCount();
       Object[] filaSeleccionada = new Object[nColumns];
       for (int i = 0; i < filaSeleccionada.length; ++i)
        filaSeleccionada[i] = modelo2.getValueAt(fila, i);
       modelo1.addRow(filaSeleccionada);
       modelo2.removeRow(fila);
      }
      else
       JOptionPane.showMessageDialog(this, "No hay registro seleccionado");
     }
     public static void main(String[] args)
     {
      new TestJTable().setVisible(true);
     }
    }
    Como ves, la data la he cargado desde Java, en tu caso se obtendrá desde MySQL.
    Hay varias cosas por hacerle al programa, como por ejemplo, no copiar todos los campos en el segundo JTable, el stock no debería figurar en un DetalleBoleta, en fin hay varias cosas por hacer.
    Espero te sirva.

    un saludo.
     
    Última edición: 3 Dic 2011