Título: Refrescar JTABLE!!
Publicado por: DarkGhetto22 en 1 Abril 2012, 14:50 pm
Quisiera saber como podría hacer para actualizar un JTABLE luego de haber modificado los datos de una Base de Datos...........he intentado con varios métodos como:
.repaint(); .updateui .revalidate
todo esto la tabla, lo mas extrano es que también intendente con los métodos del DefaultTableModel y tampoco me actualiza la tabla....acá les dejo el código, gracias por todo:import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import javax.swing.JFrame; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JTable; import javax.swing.JScrollPane; import javax.swing.table.DefaultTableModel; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener;
public class teoriasDatos extends JFrame implements ActionListener, TableModelListener{
private final String[] titulos = {"Teoria", "Autor", "Año", "Ciencia", "Id"}; private JMenuBar barra; private JMenu archivo, edicion; private JMenuItem salir, buscar, modificar, eliminar, seleccionar; private DefaultTableModel dtm = new DefaultTableModel(); private JTable tabla = new JTable(dtm); private JScrollPane scroll = new JScrollPane(tabla); private List<Integer> lista = new ArrayList<Integer>(); conexion cn = new conexion(); public teoriasDatos(){ super("Teorias System"); this.setLayout(null); this.setSize(900, 460); this.setResizable(false); this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); this.Objetos(); this.setVisible(true); } public void Objetos(){ barra = new JMenuBar(); archivo = new JMenu("Archivo"); edicion = new JMenu("Edicion"); buscar = new JMenuItem("Buscar"); modificar = new JMenuItem("Modificar"); eliminar = new JMenuItem("Eliminar"); seleccionar = new JMenuItem("Seleccionar"); salir = new JMenuItem("Salir"); barra.add(archivo); barra.add(edicion); archivo.add(salir); edicion.add(buscar); edicion.add(modificar); edicion.add(eliminar); edicion.addSeparator(); edicion.add(seleccionar); this.setJMenuBar(barra);
dtm.setColumnCount(0); dtm.setRowCount(0); dtm.fireTableDataChanged(); dtm.setColumnIdentifiers(titulos); lista.clear(); try{ ResultSet aux = cn.getSt().executeQuery("SELECT*FROM datos"); while(aux.next()){ Object [] fila = {aux.getObject(1), aux.getObject(2), aux.getObject(3), aux.getObject(4), aux.getObject(5)}; lista.add((Integer)aux.getObject(5)); dtm.addRow(fila); } }catch(SQLException ioe){ JOptionPane.showMessageDialog(null, "Error al leer registro: " + ioe); }
scroll.setBounds(0, 0, 900, 460); this.add(scroll); salir.addActionListener(this); buscar.addActionListener(this); modificar.addActionListener(this); eliminar.addActionListener(this); seleccionar.addActionListener(this); dtm.addTableModelListener(tabla); } public void actionPerformed(ActionEvent e) { if(e.getSource()==buscar){ try{ int i = Integer.parseInt(JOptionPane.showInputDialog("ID de la teoria a buscar")); ResultSet resultado = cn.buscar(i); tabla.changeSelection(i-1, i, false, false); }catch(Exception ioe){ JOptionPane.showMessageDialog(null, "Deber un introducir el ID " +ioe); } }else if(e.getSource() == modificar){ try{ int i = Integer.parseInt(JOptionPane.showInputDialog("ID de la teoria a modificar")); ResultSet resultado = cn.buscar(i); if(resultado.next()){ String au = JOptionPane.showInputDialog("Autor"); String an = JOptionPane.showInputDialog("Año"); String cie = JOptionPane.showInputDialog("Ciencia");
if(au.isEmpty()){ JOptionPane.showMessageDialog(null, "Debes rellenar todos los campos"); }else if(an.isEmpty()){ JOptionPane.showMessageDialog(null, "Debes rellenar todos los campos"); }else if(cie.isEmpty()){ JOptionPane.showMessageDialog(null, "Debes rellenar todos los campos"); }else{ cn.modificar(i, au, an, cie);
} } }catch(Exception ioe){ JOptionPane.showMessageDialog(null, "Error al modificar datos: " +ioe); }
}else if(e.getSource() == eliminar){ this.delectRows(tabla.getSelectedRows()); tabla.clearSelection(); }else if(e.getSource() == seleccionar){ tabla.selectAll(); } } public void delectRows(int[] rowSelected){ for (int i = 0; i<rowSelected.length; i++){ String query = "DELETE FROM datos WHERE IDE="+lista.get(rowSelected[i]); try{ cn.getSt().executeUpdate(query); }catch(SQLException sqle){ JOptionPane.showMessageDialog(null, "Error al eliminar teoria " +sqle); } } }
public void tableChanged(TableModelEvent tme) { } }
Título: Re: Refrescar JTABLE!!
Publicado por: visualfree en 1 Abril 2012, 20:03 pm
crea un metodo mostrarDatos() o como quieras y vuelve a llamarlo....
osea cada vez que presiones el boton agregar llama a mostrarDatos()....
Saludos
Título: Re: Refrescar JTABLE!!
Publicado por: sapito169 en 2 Abril 2012, 02:04 am
deberias comensar por no intentar cualquier cosa sin sentido sin saber lo que haces
primero lo limpias con setRownCount(0) y luego lo buelves a llenar
Título: Re: Refrescar JTABLE!!
Publicado por: viruzexe en 26 Noviembre 2013, 19:42 pm
Una pregunta.. me encuentro antes el mismo dilema, lograste solucionarlo con el RowCount(0)? o usaste algun updateui o algo así. Podrias giuarme? lo agradeceria
Título: Re: Refrescar JTABLE!!
Publicado por: Zoik en 26 Noviembre 2013, 21:39 pm
Este tema es la ostia de viejo no revivas temas, aun así como soy buena persona... Para borrar las rows de el modelo: int sizeModel = dtm.getRowCount(); for (int i = 0; i < sizeModel ; i ++) { dtm.removeRow(0); }
Una vez borradas las row, simplemente ejecuta de nuevo la consulta a la BBDD. Espero haber ayudado. Un saludo
Título: Re: Refrescar JTABLE!!
Publicado por: Mitsu en 26 Noviembre 2013, 22:23 pm
Esto ya merece un ban. ¿Pero es que no tienes sentido común?. Este tema tiene más de 1 año de antigüedad, ¿por qué no creas uno nuevo?
Título: Re: Refrescar JTABLE!!
Publicado por: viruzexe en 29 Noviembre 2013, 00:25 am
jajaja Gracias Zoik! pues lo probaré para checarlo, el problema son los renderer *****, pos eso no me quiero meter en esos pedos. mejor hago lo que dices, borro las filas del modelo y lo vuelvo a cargar con el resultSet.
y Mitsu, es porque era Simplemente el mismo problema, la lógica decía que no me contestarían pero Vualá! gracias a ambos por tomarse el tiempo.
: )
|