Atualizar Jtable

4 respostas
maykonJAVA

:smiley: oi eu tou tentando fazer um programa q tem uma jtable que mostra os dados de uma tabela de um banco de dados , tem tambem uns jtextField e 1 botao q é pa inserir no banco<== isso tudo ta funcionando sem erros

o problema e que quando eu insiro no banco em tempo de execução (claro) a tabela nao atualiza ai eu tenho q fechar e abrir alguem sabe como eu resolvo?

preciso postar os codigos?

4 Respostas

ViniGodoy

Ao atualizar, você chama o método fireTableRowChanged do seu model, indicando que linha foi alterada, para que a tabela a repinte.

Outra forma, mais tosca, é chamar o método repaint() para a tabela repintar intera.

maykonJAVA

Muito obrigado pela sua resposta amigo!

sou iniciante mas,
se não tou enganado esse metodo fireTableRowChanged e do javax.swing.table.AbstractTableModel né?

quando devo xamar esse metodo? em meu pensamento eu axo q devo criar um metodo i colocar esse dentro tipo

public void atualizar(){ fireTableRowChanged() }

estou errado?
vcs kerem q eu post meo codigo pa analizar? pq eu fiz isso e nao deu certo axo q tou errando em algum lugar

maykonJAVA

Se poder analizar o codigo tah ai

manipularBanco.java
package Chamada;
import java.sql.*;
import javax.swing.table.AbstractTableModel;

class manipularBanco extends AbstractTableModel{
		private Connection conexao;
		private Statement sta;	
                private ResultSet resultado;
                private ResultSetMetaData metaData;
                private int nlinhas;
                //abre conexao
public void open() 
{     
	try
        {
                Class.forName("com.mysql.jdbc.Driver");
               
		conexao = DriverManager.getConnection(
			"jdbc:mysql://localhost/meubanco?autoReconnect=true", 
			"root", "");
        }
        catch (ClassNotFoundException e)
        {
		
            e.printStackTrace();
	}
        catch (SQLException e)
        {
            e.printStackTrace();
	}
}
//fexa conexao
public void close()
{       
	try
        {       
		if (sta != null)
                   
		sta.close();
		conexao.close();
	}
        catch (SQLException e)
        {      
		e.printStackTrace();
	}
}//inseri novo alunono banco
public void novoAluno(int a, String b)
{
	try
        {
		open();

		sta = conexao.createStatement();
              
		sta.executeUpdate(
			"INSERT INTO presenca(n_matricula, nome) " +
                        "VALUES('"+a+"','"+b+"')");
           
		close();
	}
        catch (SQLException e)
        {
		close();
		e.printStackTrace();
	}
}
//inseri nova chamada no banco
public void novaChamada(String c)
{
	try
        {
		open();

		sta = conexao.createStatement();
              
		sta.executeUpdate(
			"ALTER TABLE presenca ADD `"+c+"` INT NULL");

		close();
	}
        catch (SQLException e)
        {
		close();
		e.printStackTrace();
	}
}
//consulta tabela table model
 public void consultarTabela(String SQL_QUERY)      
     throws SQLException, ClassNotFoundException
     {
         open();     
            
      sta = conexao.createStatement(
         ResultSet.TYPE_SCROLL_INSENSITIVE,   
         ResultSet.CONCUR_READ_ONLY ); 
          
       setQuery( SQL_QUERY );
     }
 public Class getColumnClass( int column )throws IllegalStateException
   {
      try 
      {
         String className = metaData.getColumnClassName( column + 1 );
         
        return Class.forName( className );              
      }
      catch ( Exception exception ) 
      {
         exception.printStackTrace();
      } 
      
      return Object.class;
   }
   public int getColumnCount()throws IllegalStateException
   {    
      try 
      {
         return metaData.getColumnCount(); 
      } 
      catch ( SQLException sqlException ) 
      {
         sqlException.printStackTrace();
      }
      return 0; 
   } 
   public String getColumnName( int column )throws IllegalStateException
   {   
      try 
      {
         return metaData.getColumnName( column + 1 );  
      } 
      catch ( SQLException sqlException ) 
      {
         sqlException.printStackTrace();
      } 
      
      return ""; 
   }    
   public int getRowCount()throws IllegalStateException
   {      
      
      return nlinhas;
   }
   public Object getValueAt( int row, int column )
      throws IllegalStateException
   {     
      try 
      {
         resultado.absolute( row + 1 );
         return resultado.getObject( column + 1 );
      }
      catch ( SQLException sqlException ) 
      {
         sqlException.printStackTrace();
      }      
      return "";
   }
   //metodo q ainda vou utilizar para fazer pesquisa
   public void setQuery(String query) 
      throws SQLException, IllegalStateException 
   {     
     resultado = sta.executeQuery(query);
      
      metaData = resultado.getMetaData();
     
     resultado.last();                 
      nlinhas = resultado.getRow();    
     
      fireTableStructureChanged();           
   }
}

visual.java

package Chamada;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.*;

class visual extends JFrame{
    String SQL_QUERY = "SELECT * from presenca";
     manipularBanco mb = new manipularBanco();
     
    public visual(){
    super( "teste" );
    componentes(); 
    tabelaV();
    }
    
    public void componentes(){ 
        Container ctn = getContentPane();
        
        FlowLayout layout = new FlowLayout(); 
       
        layout.setAlignment(FlowLayout.LEFT);
              
        ctn.setLayout(layout);
        JLabel la = new JLabel("Nº Matricula");        
        final JTextField ca = new JTextField("",10);        
        ctn.add(la);
        ctn.add(ca);
        
        JLabel lb = new JLabel("Nome");        
        final JTextField cb = new JTextField("",10);       
        ctn.add(lb);
        ctn.add(cb);
 
        JButton b1 = new JButton("add Aluno");
        ctn.add(b1);        
        
        JLabel lc = new JLabel("Data da chamada");        
        final JTextField cc = new JTextField("",10);        
        ctn.add(lc);
        ctn.add(cc);        
       
 
        JButton b2 = new JButton("add Nova Chamada");
        ctn.add(b2);
        
               b1.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent evt) {
                b1MouseClicked(evt);
            }

            private void b1MouseClicked(MouseEvent evt) {
                int a = Integer.parseInt(ca.getText());
                String b = cb.getText();
                manipularBanco mb = new manipularBanco();
                mb.novoAluno(a, b);
                mb.fireTableStructureChanged();
        }
        });
             b2.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent evt) {
                b2MouseClicked(evt);
            }

            private void b2MouseClicked(MouseEvent evt) {
               
                String c = cc.getText(); 
                manipularBanco mb = new manipularBanco();
                mb.novaChamada(c);
            }
        });
    }
        public void tabelaV(){
        try{
       
        mb.consultarTabela(SQL_QUERY);
        
        JTable res = new JTable( mb );
        add( new JScrollPane( res ), BorderLayout.CENTER ); 
        setSize(500, 500 );
         setVisible( true );
         
        }catch ( ClassNotFoundException classNotFound ) 
      {
         JOptionPane.showMessageDialog( null,"Driver SQL não encontrado",
                 "Driver não encontrado",JOptionPane.ERROR_MESSAGE );
         
        
         mb.close();
         System.exit( 1 );
      }
      catch ( SQLException sqlException ) 
      {
         JOptionPane.showMessageDialog( null, sqlException.getMessage(), 
            "Database error", JOptionPane.ERROR_MESSAGE );         
         
         mb.close();
         System.exit( 1 ); 
      }
        }
        
  public static void main(String args[]){
      new visual();
  }  
    
}
maykonJAVA

iaew jente niguem parou pa analizar o codigo? vlw…

Criado 22 de novembro de 2008
Ultima resposta 28 de nov. de 2008
Respostas 4
Participantes 2