Actualizar JTable

tema enviado por Fan-Shop en Java
tema iniciado el 27/04/2009
Hola les cuento, estoy desarrollando 1 proyecto el cual se basa en dos sistemas, el primero telefonista el cual es solo de ingresos a la BD y el segundo con una JTable el cual quiero ke se actualize automaticamente. llevo unos buenos dias tratando de refrescarla automaticamente pero no lo he podido lograr lo que mas se acerca es un thread que elimina los registros y luego me levanta los datos, pero es muy notorio en la interfaz. he intentado cargar los datos con un DefaultTableModel y con AbstractTableModel el cual lo he logrado pero no actualizarlo. estuve buscado y encontre un metodo llamado fireTableRowsUpdated pero no lo he podido aplicar. les dejo el codigo del JTable DefaultTableModel el cual sta fino devido a que de antes lo ocupava DefaultTableModel: public class CarreraEnCurso extends javax.swing.JInternalFrame{ //Thread blink; DefaultTableModel modelo = new DefaultTableModel(); Conecta bdd; ResultSet resultado; JFrame frame; String num_movil; Object [] fila = new Object[8]; public String Estado; //public boolean Estado=false; /** Creates new form CarreraEnCurso */ public CarreraEnCurso() { // Get the titlebar and set it to null setRootPaneCheckingEnabled(false); //javax.swing.plaf.InternalFrameUI ui= frame.getUI(); ((javax.swing.plaf.basic.BasicInternalFrameUI)ui).setNorthPane(null); // blink = new Thread(this); //blink = new Thread(this); //blink.start(); bdd = new Conecta(); initComponents(); //Llenar ComboBox Registro try { //Cargar ComboBox con datos de la BD en este caso datos de movil resultado = bdd.Mostrar("SELECT Id_registro FROM registro WHERE registro.Estado_registro ='Pendiente' or registro.Estado_registro ='En Curso'" ); while( resultado.next() ) { String txt = resultado.getString("Id_registro"); this.id_registroBox.addItem(txt); } bdd.sentencia.close(); bdd.conexion.close(); }catch( Exception e ) { System.out.println( e ); return; } //Llenar tabla try { resultado = bdd.Mostrar( "SELECT registro.Id_registro,registro.Nom_empresa,registro.Num_movil,registro.Nom_pasajero,registro.Fecha_pedido, registro.Hora_pedido,registro.Estado_registro, registro.Origen FROM registro WHERE registro.Estado_registro ='Pendiente' or registro.Estado_registro ='En Curso'" ); // Creamos las columnas. modelo.addColumn("Id Registro"); modelo.addColumn("Empresa"); modelo.addColumn("Nº Movil"); modelo.addColumn("Nom. Pasajero"); modelo.addColumn("Fecha Pedido"); modelo.addColumn("Hra. Pedido"); modelo.addColumn("Estado Carrera"); modelo.addColumn("Origen"); // Bucle para cada resultado en la consulta while (resultado.next()) { // Se crea un array que sera una de las filas de la tabla. //Object [] fila = new Object[8]; // Hay 12 columnas en la tabla // Se rellena cada posician del array con una de las columnas de la tabla en base de datos. for (int i=0;i<8;i++) fila[i] = resultado.getObject(i+1); // El primer indice en resultado es el 1, no el cero, por eso se suma 1. // Se añade al modelo la fila completa. modelo.addRow(fila); } jTable1.setModel(modelo); bdd.sentencia.close(); bdd.conexion.close(); }catch( Exception e ) { System.out.println( e ); return; } } AbstractTableModel: public class ModeloTablaResultados extends AbstractTableModel { private Connection conexion; private Statement instruccion; private ResultSet conjuntoResultados; private ResultSetMetaData metaDatos; private int numeroDeFilas; Thread runner; // mantener el registro del estado de la conexión a la base de datos private boolean conectadoALaBaseDeDatos = false; // inicializar conjuntoResultados y obtener su objeto de meta datos; // determinar el número de filas public ModeloTablaResultados( String controlador, String url, String consulta ) throws SQLException, ClassNotFoundException { // cargar clase de controlador de base de datos //Thread runner = new Thread(this); //runner.start(); Class.forName( controlador ); // conectarse a la base de datos conexion = DriverManager.getConnection( url ); // crear objeto Statement para consultar la base de datos instruccion = conexion.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY ); // actualizar estado de conexión a la base de datos conectadoALaBaseDeDatos = true; // establecer consulta y ejecutarla establecerConsulta( consulta ); } // obtener la clase que representa al tipo de columna public Class getColumnClass( int columna ) throws IllegalStateException { // asegurar que la conexión a la base de datos esté disponible if ( !conectadoALaBaseDeDatos ) throw new IllegalStateException( "No hay conexion a la base de datos" ); // determinar la clase de Java de columna try { String nombreClase = metaDatos.getColumnClassName( columna + 1 ); // devolver objeto Class que representa a nombreClase return Class.forName( nombreClase ); } // atrapar excepciones SQLException y ClassNotFoundException catch ( Exception excepcion ) { excepcion.printStackTrace(); } // si ocurren problemas arriba, suponer que es tipo Object return Object.class; } // obtener el número de columnas en el objeto ResultSet public int getColumnCount() throws IllegalStateException { // asegurar que la conexión a la base de datos esté disponible if ( !conectadoALaBaseDeDatos ) throw new IllegalStateException( "No hay conexion a la base de datos" ); // determinar el número de columnas try { return metaDatos.getColumnCount(); } // atrapar excepciones SQLException e imprimir mensaje de error catch ( SQLException excepcionSQL ) { excepcionSQL.printStackTrace(); } // si ocurren problemas arriba, devolver 0 para el número de columnas return 0; } // obtener el nombre de una columna específica en el objeto ResultSet public String getColumnName( int columna ) throws IllegalStateException { // asegurar que la conexión a la base de datos esté disponible if ( !conectadoALaBaseDeDatos ) throw new IllegalStateException( "No hay conexion a la base de datos" ); // determinar el nombre de la columna try { return metaDatos.getColumnName( columna + 1 ); } // atrapar excepciones SQLException e imprimir mensaje de error catch ( SQLException excepcionSQL ) { excepcionSQL.printStackTrace(); } // si hay problemas, devolver cadena vacía para el nombre de la columna return ""; } // devolver el número de filas en el objeto ResultSet public int getRowCount() throws IllegalStateException { // asegurar que la conexión a la base de datos esté disponible if ( !conectadoALaBaseDeDatos ) throw new IllegalStateException( "No hay conexion a la base de datos" ); return numeroDeFilas; } // obtener el valor en una fila y columna específicas public Object getValueAt( int fila, int columna ) throws IllegalStateException { /***********************************/ // asegurar que la conexión a la base de datos esté disponible if ( !conectadoALaBaseDeDatos ) throw new IllegalStateException( "No hay conexion a la base de datos" ); // obtener un valor en una fila y columna específicas del objeto ResultSet try { conjuntoResultados.absolute( fila + 1 ); return conjuntoResultados.getObject( columna + 1 ); } // atrapar excepciones SQLExceptions e imprimir mensaje de error catch ( SQLException excepcionSQL ) { excepcionSQL.printStackTrace(); } // si hay problemas, devolver objeto cadena vacía return ""; } // establecer nueva cadena de consulta para la base de datos public void establecerConsulta( String consulta )throws SQLException, IllegalStateException { // asegurar que la conexión a la base de datos esté disponible if ( !conectadoALaBaseDeDatos ) throw new IllegalStateException( "No hay conexion a la base de datos" ); // especificar consulta y ejecutarla conjuntoResultados = instruccion.executeQuery( consulta ); // obtener meta datos para el objeto ResultSet metaDatos = conjuntoResultados.getMetaData(); // determinar el número de filas en el objeto ResultSet conjuntoResultados.last(); // mover a la última fila numeroDeFilas = conjuntoResultados.getRow(); // obtener número de fila // notificar al objeto JTable que el modelo ha cambiado fireTableStructureChanged(); } /*public void run() { //while (true) { // updateStocks(); fireTableRowsUpdated(0, - 1); try { Thread.sleep(1000); } catch (InterruptedException ie) { } //} }*/ // cerrar objetos Statement y Connection public void desconectarDeLaBaseDeDatos() { // cerrar objetos Statement y Connection try { instruccion.close(); conexion.close(); } // atrapar excepciones SQLException e imprimir mensaje de error catch ( SQLException excepcionSQL ) { excepcionSQL.printStackTrace(); } // actualizar estado de conexión a la base de datos finally { conectadoALaBaseDeDatos = false; } } } // fin de la clase ResultSetTableModelodel