problemas con Jtable

deadlykyo
09 de Noviembre del 2004
Holas a todos, bueno estoy haciendo un pequeño proyecto con bases de datos y java, pero tengo un par de problemillas, lo primero es que cuando inserto un dato nuevo en mi JTable no puedo actualizar la tabla ese mismo instante, pero cuando hago correr de nuevo el programa me muestra los datos actualizados, el otro problemilla que tengo es que cuando inicio el programa siempre me omite la primera fila de datos que me devuelve mi base de datos (revise si es que recibo todos los datos de mi BD en mi programa y si los recibo en un arreglo bidimensional, respuestaBD[][]), bueno acontinuacion les mando algunas partes del codigo que manejo(me olvidaba estoy trabajando con mysql 4.0.21).

//metodo para update, insert y delete en mi BD

import java.sql.*;
public class base
{
//mas lineas de codigo conexion y otros metodos
void conexionBD();

public String[][] consultaSQLstr(String consulta);

public boolean actualizarSQL(String consulta)
{

try{
stmt = con.createStatement();
stmt.executeUpdate(consulta);
con.commit();
stmt.close();
return true;
}
catch (Exception e)
{System.out.println("error en actualizarSQL "+e.getMessage());
return false;
}
}
}


//aqui es donde creo la tabla y la añado al panel


public class Usuario extends JPanel implements ActionListener
{
String consulta1
String [][] dato1;
base b;

// mas lineas de codigo (paneles, botones, etiquetas)

consulta1 ="Select ID_USUARIO, LOGIN, TIPOUSUARIO from USUARIO;";
String[] titulo1 ={"Carnet de Identidad", "Login" , "Cargo"};
dato1 =b.consultaSQLstr(consulta1);
tablaIngreso=new JTabla(dato1,titulo1);
tablaIngreso.setTitulo("USUARIOS");
panelControl.add(tablaIngreso,BorderLayout.CENTER);
panelControl.add(panelBoton,BorderLayout.EAST);
}
//tengo una instancia de la clase JTable llamada JTabla

import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;
import java.util.Vector;

public class JTabla extends JPanel
{private Object[][] dato;
private String[] titulo;
private int numeroFilas;
private int numeroColumnas;
private JTable tabla;
private JScrollPane scrollPanel;
private String cod;
private javax.swing.table.DefaultTableModel modeloTabla;
public JTabla(Object[][] d, String[] t)
{setLayout(new BorderLayout());
dato = d;
titulo = t;
scrollPanel = new JScrollPane();
tabla = new JTable();
tabla.setOpaque(false);
setOpaque(false);
modeloTabla = new javax.swing.table.DefaultTableModel( d ,t)
{int totalColumna;
public boolean isCellEditable(int fila, int columna)
{if (columna <= tabla.getColumnCount())
{return false;}
else
{return true;}
}
};
tabla.setModel(modeloTabla);
tabla.setEditingColumn(tabla.getColumnCount());
scrollPanel.setViewportView(tabla);
scrollPanel.setOpaque(false);
add(scrollPanel,BorderLayout.CENTER);
}

protected String getNombreColumna(int col)
{return titulo[col];}

protected String getValor( int fila,int columna)
{return (""+tabla.getValueAt(fila,columna));}

protected void setValor(Object valor, int fila, int columna)
{tabla.setValueAt( valor, fila, columna);}

protected void setAtributos(Object d[][], String t[])
{modeloTabla.setDataVector(d,t);
tabla.setModel(modeloTabla);}

protected void setAtributos(Object d[][])
{modeloTabla.setDataVector( d, titulo);
tabla.setModel(modeloTabla);}

protected void setTitulo(String t)
{setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),t));}

public JTable getTabla()
{return tabla;}

protected void annadirFila(Object[] datoFila)
{modeloTabla.addRow(datoFila);
tabla.setModel(modeloTabla);}

protected void insertarFila(int fila, Object[] dato)
{modeloTabla.insertRow(fila,dato);
tabla.setModel(modeloTabla);}

protected void quitarFila(int fila)
{modeloTabla.removeRow(fila);
tabla.setModel(modeloTabla);}

public void setDato(Object[][] dat)
{setAtributos(dat);}

public int getNumeroFilas()
{return tabla.getRowCount();}

}

no se si alguien me podria ayudar a con la actualizacion de la tabla y porque al momento que creo mi JTabla no incluye la primera fila, bueno de antemano muchas gracias por darse la molestia de leerlo

aureliano
09 de Noviembre del 2004
Para tu problema de la actualizacion de los datos se me ocurre que puedes hacer una llamada al metodo repaint del frame que contiene la tabla justo despues de realizar la modificacion.

didiguerrero
09 de Noviembre del 2004
utiliza alguno de los metodos fire del modelo de la tabla ye el se encargara de todo

modelo.fireStructureChange()

creo que es uno de ellos

ojala te sirva. Guerrero