Autor
|
Tema: [Solucionado] JAVA Como Refrescar JTable (Leído 22,894 veces)
|
MiguelP
Desconectado
Mensajes: 15
|
Hola amigos buenos días tengo un gran problema al no poder refrescar mi JTable se que hay varios foros vídeos pero por mas que los aplico no me actualiza mi JTable espero puedan ayudarme, les explico un poco tengo en mi clase formulario mi JFrame con todos los controles y aparte mi clase modelo con los modelos que le adjunto al JTable para que de ahi pasen a mi formulario y lo pegue nada mas.Todo estaba bien hasta que ahora que quiero refrescar mi jtable no lo hace le hice seguimiento y llena mi modelo refrescarDatos pero al terminar con todos los datos cargados llega vació a mi jtable me bota el siguiente error : Exception in thread "AWT-EventQueue-0" java.lang.NullPointerExceptionaquí les dejo el código para que tengan una visión mas clara: aquí lleno mi método de insertar datos y mi modelo para que se actualice al insertar los datos, están en un jdialog se llenan al presionar el botón aceptar: info.InsertarDatosC(var1,var2,var3,varvalue1,varvalue2,varvalue3,vare1); try { DefaultTableModel modelo = new DefaultTableModel(); modelo = mod.refrescarDatos(opt); table.setModel(modelo); System.out.println(opt); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); }
Y este es mi modelo: public DefaultTableModel refrescarDatos(String variable) throws SQLException { DefaultTableModel modelotablabd = new DefaultTableModel();
for (String columna : man.LlenarTitulos(variable)) { modelotablabd.addColumn(columna); }
Statement sf = conn.getConnection().createStatement(); String cad = "select * from "+variable; ResultSet rs = sf.executeQuery(cad); ResultSetMetaData rsMd = rs.getMetaData(); int CantidadColumnas = rsMd.getColumnCount();
Object datos[]=new Object[CantidadColumnas]; try { while (rs.next()) { for (int i = 0; i <CantidadColumnas; i++) { datos[i] = rs.getObject(i + 1); System.out.println(datos[i]); // System.out.println("fil : "+datos[i]); } modelotablabd.addRow(datos);
} rs.close(); } catch (Exception e) { e.printStackTrace(); } return modelotablabd; } No se si deba usar algo como un método aparte para actualizarla...si fuera así por favor como debería hacer. Espero en verdad puedan ayudarme necesito ayuda con urgencia estaré al tanto saludos amigos.
|
|
« Última modificación: 20 Marzo 2014, 18:16 pm por MiguelP »
|
En línea
|
|
|
|
Mitsu
|
Hola,
Para poder brindar una mejor ayuda, por favor etiqueta tu código entre etiquetas GeSHi y coloca el rastreo de pila que te arroja printStackTrace().
Saludos.
|
|
|
En línea
|
|
|
|
MiguelP
Desconectado
Mensajes: 15
|
ya lo hice amigo espero me puedas ayudar saludos
|
|
|
En línea
|
|
|
|
Mitsu
|
Necesito el rastreo completo de pila no solamente el tipo de excepción. En el rastreo de pila te indica la causa, y la posible línea que lanza la excepción. Es muy importante el análisis de excepciones. El rastreo de pila es parecido a ésto: Exception in thread "main" org. hibernate. exception. SQLGrammarException: could not execute statement at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:123) at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:136) at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:58) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3067) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3509) at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:88) at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:377) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:369) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:286) at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:339) at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:52) at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1234) at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:404) at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101) at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:175) at pe.edu.unp.dao.LibroDAOI.guardar(LibroDAOI.java:39) at pe.edu.unp.biblioteca.Biblioteca.main(Biblioteca.java:18) Caused by: org.postgresql.util.PSQLException: ERROR: column "titul" of relation "libro" does not exist // AQUI LA CAUSA DE LA EXCEPCION! at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2161) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1890) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:559) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:417) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:363) at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:133) ... 15 more Java Result: 1
PD: Primero tienes que agregar el modelo a la tabla, y a partir de ahí agregar los datos al modelo. Primero agrega un DefaultTableModel a tu tabla, y luego modifica el método refrescarDatos() para que reciba el modelo y le agregue las filas. Puede ser por esto que te lanza el NullPointerException.
|
|
« Última modificación: 19 Marzo 2014, 18:17 pm por Mitsu »
|
En línea
|
|
|
|
MiguelP
Desconectado
Mensajes: 15
|
Este es el rastro completo de la pila:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at formulario.JDialog.actionPerformed(JDialog.java:170) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$200(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)
tambien he probado dandole : table.setModel(form.refrescarDatos(opt)); y me da el mismo error.
|
|
|
En línea
|
|
|
|
Mitsu
|
Hmm ese log no ayuda en nada. Lo que tienes aquí es un problema de nullabilidad de algún objeto, es decir, algún objeto no ha sido inicalizado y estás tratando de acceder a él. Si tienes un NullPointerException en el catch colócalo y vuelve a probar para ver si te da un rastreo de pila más específico.
|
|
|
En línea
|
|
|
|
MiguelP
Desconectado
Mensajes: 15
|
era porque no le pasaba mi JTable a mi clase ya se la paso, pero ahora no me muestra nada se queda ahi no me ejecuta mi boton...alguna idea? ayudame porfa
|
|
|
En línea
|
|
|
|
Mitsu
|
Ya ves, solo es cuestión de saber interpretar las Excepciones (te recomiendo leer sobre esto y sobre debug).
¿Dices que pulsas el botón y no pasa nada? Pega el código que tienes en el actionPerformed de tu botón para poder verlo.
|
|
|
En línea
|
|
|
|
MiguelP
Desconectado
Mensajes: 15
|
Te explico : Tengo mi clase formulario donde están ubicados todos mis controles la mayoría, he creado una clase JDialog que es una ventana que al seleccionar un radiobutton y darle clic en aceptar (En la clase formulario) llamo a la clase JDialog lleno mi método JDialogdinamico le paso las variables y armo mi ventana donde me muestra campos para poder ingresarlos y realizar mi insert, hasta ahi todo bien hace lo que qiero me inserta n la base de datos perfecto, ahora el problema era como refresco mi JTable?pense en ponerle un select llenar mis filas y pasarselas al modelo, se llenan tengo mi objeto con los datos pero me salio el error de que no le pasaba la tabla ahora que se la paso no se muestra mi JDialog. No se que pueda ser aqui te paso el codigo de mi boton aceptar formulario: if(e.getSource()==btnAceptarM){ String tip="Alta de ",var="",opcion="",accion="",cod=""; ArrayList camps = new ArrayList(); //RadioButton Altaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa if(rbtAlta.isSelected()){ Ambc jd = new Ambc(tablabd); if(variable.equals("Cliente")){ System.out.println("\n "+"Hola Cliente"); opcion="Cliente"; var="CLIENTE"; } else if(variable.equals("Tasas")){ System.out.println("\n "+"Hola Tasas"); opcion="Tasas"; var="TASAS"; } else if(variable.equals("Area")){ System.out.println("\n "+"Hola Area"); opcion="Area"; var="AREA"; } jd.JdialogDianamico(var,opcion,tip,camps,accion); } Ahi ya llene mi Jdialogdinamico ahora te paso el codigo de mi boton aceptar de mi clase JDialog @Override public void actionPerformed(ActionEvent e) { if(e.getSource()==btnCancelarC){ this.dispose(); } if(e.getSource()==btnAceptarC){ String var1=ListaCaja.get(0).getText(),var2=ListaCaja.get(1).getText(),var3=ListaCaja.get(2).getText(); String varvalue1=ListaCaja.get(0).getName(),varvalue2=ListaCaja.get(1).getName(),varvalue3=ListaCaja.get(2).getName();
if(ListaCaja.get(0).getText().isEmpty() || ListaCaja.get(1).getText().isEmpty() || ListaCaja.get(2).getText().isEmpty()) { JOptionPane.showMessageDialog(null,"Se Requiere Llenar todos los Campos","Advertencia",JOptionPane.WARNING_MESSAGE); }else{ switch(tipo){ case "Alta de ": info.InsertarDatosC(var1,var2,var3,varvalue1,varvalue2,varvalue3,vare1); try { DefaultTableModel model = new DefaultTableModel(); model = mod.refrescarDatos(opt); table.setModel(model); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } Espero me puedas ayudar saludos.
|
|
|
En línea
|
|
|
|
Mitsu
|
Hola, disculpa la demora. La verdad te entiendo poco (quizás soy un poco lerdo para entender xD). Según tengo entendido a partir de un JFrame quieres crear un JDialog para inserción de datos y luego esos datos mostrarlos en una JTable. ¿Estoy bien? Bien primero debes saber que un JDialog debe tener un padre, que debe ser un JFrame o Frame (AWT). Así que quizás es por eso que no te lo muestra. Te coloco un par de códigos de lo que yo entiendo que quieres hacer: JFrame: public GUI() { // tus controles btnAceptar.addActionListener(this); this.add(btnAceptar); // configuracion del jframe, tamanio, setDefaultCloseOperation(int tipo),y setVisible(true) etc } @Override new Dialogo(this,true); // creamos el JDialog e indicamos que este JFrame sera su padre } }
JDialog: public class Dialogo extends JDialog { public Dialogo (JFrame padre, boolean modal ) { // JDialog necesita un padre, es decir siempre dependera de un JFrame o Frame (AWT) // aqui puedes usar 'padre' para obtener los valores que se han elegido en el // formulario (padre) para crer dinamicamente tu JDialog asi como tu quieres // creamos la tabla, le asignamos un modelo y le agregamos una fila tblDatos.setModel(modelo); @Override try { agregarFila(modelo); } }); this.add(btnAceptar); this.add(tblDatos); } ResultSetMetadata resultmeta = null; String sql = "select * from TUTABLA;"; try { // recuperamos lo que hay en la base de datos conexion = Conexion.getConnection(); // Conexion es una clase que devuelve una conexion a la DB estatuto = conexion.preparedStatement(); resultmeta = rs.getMetadaData(); int columnas = resultset.getColumnCount(); while(rs.next()) { for(byte i=0; i<columnas; i++) { data[i] = resultmeta.getObject(i+1); } } modelo.addRow(data); finally { if(conexion != null) conexion.close(); } } }
Esta sería la forma de a partir de un JFrame crear un JDialog y en éste crear una tabla. Saludos.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
{SOLUCIONADO} JTable me repite datos de un ResultSet {SOLUCIONADO}
Java
|
|Miguel|
|
4
|
6,498
|
3 Marzo 2012, 19:26 pm
por Proteus1989
|
|
|
Refrescar JTABLE!!
Java
|
DarkGhetto22
|
6
|
21,575
|
29 Noviembre 2013, 00:25 am
por viruzexe
|
|
|
Como refrescar los datos de un textarea sin refrescar toda la pagina.
Desarrollo Web
|
70N1
|
3
|
4,602
|
1 Mayo 2012, 08:02 am
por Graphixx
|
|
|
Cómo seleccionar una fila de un JTable de Java
Java
|
soy_nicanor
|
5
|
10,703
|
22 Enero 2015, 22:48 pm
por Usuario Invitado
|
|
|
¿Como hacer una resta en un jtable en java netbeans?
Java
|
Larry16
|
4
|
3,654
|
3 Abril 2016, 22:31 pm
por Larry16
|
|