Foro sobre Java SE > Refrescar Jtable
En vez de ésto:
DefaultTableModel modelo = new DefaultTableModel();
modelo = mod.refrescarDatos(opt);
table.setModel(modelo);
prueba con esto:
table.setModel(refrescarDatos(opt));
Hola gracias por responder, probé eso y me salio el mismo error...alguna otra idea =)?
¿En qué línea sale ese error?.
me lanza lo siguiente :
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)
¿Pero que hay en esta línea?
formulario.JDialog.actionPerformed(JDialog.java:170)
ahi es donde declaro lleno mi modelo, parece que no llenaba mi clase con el jtable, ya lo hice pero ahora cuando le doy a aceptar no me sale mi jdialog con los campos para poder insetar no me sale nada
No sé si te das cuenta, pero así es muy difícil, por no decir imposible, ayudarte.
No sé si esa excepción se ha resuelto ya, y tienes otro problema diferente; o si todo sigue más o menos igual.
Lo cierto es que, sin ver tu código, no puedo saber qué pasa.
OK te explico mira:
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:
[QUOTE] 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);
}[/QUOTE]
Ahi ya llene mi Jdialogdinamico ahora te paso el codigo de mi boton aceptar de mi clase JDialog
[QUOTE]@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();
}[/QUOTE]
Espero me puedas ayudar saludos.
Un código que no se puede ni compilar ni ejecutar, no se puede depurar.
Aparte de que está incompleto: por ejemplo, esa variable mod no sé de dónde sale.
Lo que te puedo asegurar es que la tabla se actualiza de dos maneras: al añadir cada fila del DefaultTableModel, o al ejecutar el setModel.
Hola mod viene de mi clase modelo donde tengo este metodo :
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;
}
con eso lleno la ariable de mi modelo que se supone deberia ejecutarse pero nada...
Te dejo un ejemplo ejecutable, que muestra cómo se llena una JTable con un DefaultTableModel:
import javax.swing.table.DefaultTableModel;
public class Test extends javax.swing.JFrame {
public Test() {
initComponents();
((DefaultTableModel) jTable1.getModel()).addRow(new Object[]{"11", "12", "13", "14"});
((DefaultTableModel) jTable1.getModel()).addRow(new Object[]{"21", "22", "23", "4"});
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(new java.awt.FlowLayout());
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
jScrollPane1.setViewportView(jTable1);
getContentPane().add(jScrollPane1);
pack();
}// </editor-fold>
public static void main(String args[]) {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Test().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
// End of variables declaration
}
Hola choces revise tu codigo y cogi el :
((DefaultTableModel) jTable1.getModel()).addRow(new Object[]{"11", "12", "13", "14"});
y lo reemplaze con los datos que ingreso en el JDialog asi le agrego la fila y tambien hago mi insert te agradesco por la ayuda sino fuera por eso no lo hacia asi muchas gracias =) te dejo parte del codigo donde empleo esto:
@Override
public void actionPerformed(ActionEvent e) {
((DefaultTableModel)tablabd.getModel()).addRow(new Object[{jd.ListaCaja.get(0).getText(),jd.ListaCaja.get(1).getText(),jd.ListaCaja.get(2).getText()});
}
});
De nuevo gracias acudire aqui ante otra consulta saludos =)
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.NullPointerException
aquí 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.