Actualizar JTable en tiempo de ejecucion con datos de una Base de datos

Iniciado por MrSimpatia, 1 Noviembre 2019, 22:53 PM

0 Miembros y 1 Visitante están viendo este tema.

MrSimpatia

Buenas tengo un problema, tengo una base de datos llamada "proyecto" con una tabla unica que es "Insumo", en ella tengo 10 columnas con diferentes datos.
Y tengo que realizar un programa que pueda añadir datos, meterlos a la una tabla (JTable) y un par de cosas mas que no vienen al caso.
El tema es que puedo cargar la tabla con los datos ingresados en la base de datos una vez arranca el programa, pero cuando ya esta en ejecucion no puedo, intente poniendo un boton que realizara dicha accion pero no me salio, tambien intente que los datos ingresados en una de las ventanas (JDialog) se enviaran a la tabla (Que esta en un JDialog distinto al anterior)

Les dejo el codigo tanto de la clase Conexion, como de los 2 JDialog

Código (java) [Seleccionar]


package Logica;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.DefaultTableModel;


public class Conexion {
   
   static Connection con=null;
   public static Conexion instancia;
   private Conexion(){
       
   String URL="jdbc:mysql://localhost/proyecto2bc";
       try {
           
           Class.forName ("com.mysql.jdbc.Driver").newInstance();
           con = DriverManager.getConnection(URL,"Nico","");
           System.out.println("Conexion exitosa");          
           
       } catch (Exception ex) {
           System.out.println(ex.getMessage());
       }
   
   }
   
   public static Conexion getInstancia()
   {
       Connection con=null;
       if (instancia == null)
       instancia = new Conexion();
       return instancia;
}
   public ResultSet mostrarInsumo (){
       ResultSet res=null;
       Statement stm;
       
           try {
               stm = con.createStatement();
               res=stm.executeQuery("select * from insumo");
           
           
           } catch (Exception ex) {
             System.out.println(ex.getMessage());
        }
           
        return res;
   
   }
public void AgregarInsumo(String ID, String Tipo, String marca, String version, String modelo, String potencia, double tamaño, String descripcion, int cantidad, int precio) throws SQLException{
       String query="insert into insumo values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
       try (PreparedStatement pstm = con.prepareStatement(query)) {
           pstm.setString(1, ID);
           pstm.setString(2, Tipo);
           pstm.setString(3, marca);
           pstm.setString(4, version);
           pstm.setString(5, modelo);
           pstm.setString(6, potencia);
           pstm.setDouble(7,tamaño);
           pstm.setString(8, descripcion);
           pstm.setInt(9, cantidad);
           pstm.setInt(10, precio);
           pstm.executeUpdate();
       } catch (SQLException ex) {
           System.out.println(ex.getMessage());;
       }
   }
public void EliminarFila(String ID) throws SQLException{
       String query="delete from libro where ID = ?";
       PreparedStatement pstm=con.prepareStatement(query);
       pstm.setString(1, ID);
       pstm.execute();
   }

public void ActualizarLista(DefaultTableModel modeloT){
       try {
           boolean igual=false;
           Statement stm=con.createStatement();
           ResultSet rs=stm.executeQuery("select * from insumo");
           while(rs.next()){
               String ID=rs.getString("ID_Insumo");
               String Tipo=rs.getString("tipo_Insumo");
               String marca=rs.getString("marca");
               String version=rs.getString("version");
               String modelo=rs.getString("modelo");
               String potencia=rs.getString("potencia");
               String tamaño=rs.getString("LongitudCable");
               String descripcion=rs.getString("descripcion");
               String cantidad=rs.getString("cant_insumo");
               String precio=rs.getString("precio");
               String[] Fila={ID, Tipo, marca, version, modelo, potencia, tamaño, descripcion, cantidad, precio};
               for(int i=0;i<modeloT.getRowCount(); i++){
                   int contador=0;
                   for(int j=0;j<modeloT.getColumnCount();j++){
                       String tabla=(String)modeloT.getValueAt(i, j);
                       if(Fila[j].equals(tabla)){
                           contador++;
                       }
                       if(contador==50){
                           igual=true;
                       }
                   }
               }
               if(!igual) modeloT.addRow(Fila);
           }
       } catch (SQLException ex) {
           System.out.println(ex.getMessage());
       }
   }

}



   JDialog que contiene la tabla

Código (java) [Seleccionar]

package Presentacion;
import java.sql.ResultSet;
import javax.swing.table.DefaultTableModel;
import Logica.*;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
public class frmArticulo extends javax.swing.JDialog {
   static Connection conn= null;
   static Conexion con = Conexion.getInstancia();
   
   static DefaultTableModel lista;
   public frmArticulo(java.awt.Frame parent, boolean modal) throws SQLException {
       super(parent, modal);
       
       ResultSet rs = con.mostrarInsumo();
       String [] titulosinsumos= {"ID","Tipo","Marca","Version","Modelo","Potencia","Tamaño","Descripcion","Cantidad","Precio" };
        DefaultTableModel lista = new DefaultTableModel(null,titulosinsumos ){
           @Override
           public boolean isCellEditable(int filas, int columnas) {
               if(columnas == 10){
                   return true;
               } else { return false;
               
               }
           }
           
       
       };
     
       
       try {
           while (rs.next()){
               String ID [] = {rs.getString(1),rs.getString(2),rs.getString(3),rs.getString(4),rs.getString(5),rs.getString(6),String.valueOf(rs.getFloat(7)),rs.getString(8),Integer.toString(rs.getInt(9)),Integer.toString(rs.getInt(10))};
               lista.addRow(ID);
               
               
           }
       } catch (Exception e) {
           System.out.println("Puto");
       }
       initComponents();
       tablaInsumo.setModel(lista);
     
   }
 


   @SuppressWarnings("unchecked")
   // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
   private void initComponents() {

       jScrollPane1 = new javax.swing.JScrollPane();
       tablaInsumo = new javax.swing.JTable();
       btnEliminar = new javax.swing.JButton();
       btnEditar = new javax.swing.JButton();
       btnAñadir = new javax.swing.JButton();
       btnSalir = new javax.swing.JButton();
       btnActualizar = new javax.swing.JButton();

       setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
       addWindowListener(new java.awt.event.WindowAdapter() {
           public void windowActivated(java.awt.event.WindowEvent evt) {
               formWindowActivated(evt);
           }
           public void windowOpened(java.awt.event.WindowEvent evt) {
               formWindowOpened(evt);
           }
       });

       tablaInsumo.setModel(new javax.swing.table.DefaultTableModel(
           new Object [][] {

           },
           new String [] {

           }
       ));
       jScrollPane1.setViewportView(tablaInsumo);

       btnEliminar.setText("Eliminar Articulo");

       btnEditar.setText("Editar Articulo");
       btnEditar.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               btnEditarActionPerformed(evt);
           }
       });

       btnAñadir.setText("Añadir Articulo");
       btnAñadir.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               btnAñadirActionPerformed(evt);
           }
       });

       btnSalir.setText("Salir");
       btnSalir.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               btnSalirActionPerformed(evt);
           }
       });

       btnActualizar.setText("Actualizar");
       btnActualizar.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               btnActualizarActionPerformed(evt);
           }
       });

       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)
                   .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                       .addComponent(btnEliminar, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 124, Short.MAX_VALUE)
                       .addComponent(btnEditar, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                       .addComponent(btnAñadir, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                       .addComponent(btnSalir, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                   .addComponent(btnActualizar))
               .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
               .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 685, Short.MAX_VALUE)
               .addContainerGap())
       );
       layout.setVerticalGroup(
           layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
           .addGroup(layout.createSequentialGroup()
               .addContainerGap(98, Short.MAX_VALUE)
               .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                   .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                       .addComponent(btnActualizar)
                       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                       .addComponent(btnAñadir, javax.swing.GroupLayout.PREFERRED_SIZE, 61, javax.swing.GroupLayout.PREFERRED_SIZE)
                       .addGap(18, 18, 18)
                       .addComponent(btnEditar, javax.swing.GroupLayout.PREFERRED_SIZE, 61, javax.swing.GroupLayout.PREFERRED_SIZE)
                       .addGap(18, 18, 18)
                       .addComponent(btnEliminar, javax.swing.GroupLayout.PREFERRED_SIZE, 61, javax.swing.GroupLayout.PREFERRED_SIZE)
                       .addGap(18, 18, 18)
                       .addComponent(btnSalir, javax.swing.GroupLayout.PREFERRED_SIZE, 65, javax.swing.GroupLayout.PREFERRED_SIZE)
                       .addGap(28, 28, 28))
                   .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                       .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 372, javax.swing.GroupLayout.PREFERRED_SIZE)
                       .addContainerGap())))
       );

       pack();
   }// </editor-fold>                        

   private void btnAñadirActionPerformed(java.awt.event.ActionEvent evt) {                                          
       new frmAñadir(this,true,false).setVisible(true);
       
   }                                        

   private void btnSalirActionPerformed(java.awt.event.ActionEvent evt) {                                        
       dispose();
   }                                        

   private void btnEditarActionPerformed(java.awt.event.ActionEvent evt) {                                          
       new frmAñadir(this,true,true).setVisible(true);
   }                                        

   private void formWindowOpened(java.awt.event.WindowEvent evt) {                                  
     
       
   }                                

   private void formWindowActivated(java.awt.event.WindowEvent evt) {                                    
     
   }                                    

   private void btnActualizarActionPerformed(java.awt.event.ActionEvent evt) {                                              
             
       
   }                                            


   

   // Variables declaration - do not modify                    
   private javax.swing.JButton btnActualizar;
   private javax.swing.JButton btnAñadir;
   private javax.swing.JButton btnEditar;
   private javax.swing.JButton btnEliminar;
   private javax.swing.JButton btnSalir;
   private javax.swing.JScrollPane jScrollPane1;
   public static javax.swing.JTable tablaInsumo;
   // End of variables declaration                  
}


PD: El codigo en general es autogenerado por el diseñador de NetBeans, esta tambien el JDialog que contiene el formulario (Por algun motivo, el cual creo es el tamaño de el mensaje, no puedo enviarlo). Si pudieran resolver mi duda lo agradeceria mucho

Beginner Web

Depende, yo usaba un PostConstruct que adentro tenia un metodo obtenerLista(); que se generaba cada rato y la tabla se actualzabla sola, pero no en tiempo real sino habia que realizar una accion o refrescar la pagina
7w7

sapito169

#2
prueba cambiando la linea 42 en la 15

arregla la linea 81   pasale un objeto o le pasas un callback