Refrescar JTABLE!!

Iniciado por DarkGhetto22, 1 Abril 2012, 14:50 PM

0 Miembros y 1 Visitante están viendo este tema.

DarkGhetto22

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) {
       
    }
   
       
}

visualfree

crea un metodo mostrarDatos() o como quieras y vuelve a llamarlo....

osea cada vez que presiones el boton agregar llama a mostrarDatos()....

Saludos

sapito169

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

viruzexe

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

Zoik

Este tema es la ostia de viejo no revivas temas, aun así como soy buena persona...

Para borrar las rows de el modelo:

Código (java) [Seleccionar]

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

Mitsu

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?

viruzexe

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.

: )