Usar JTable buscando dados do Banco de Dados

Bom dia pessoal,

Tõ precisando de uma ajuda para implementar uma J Table no meu programa.
Preciso que a tabela atualize automaticamente a medide que os dados sejam inseridos no banco.

O meu código é esse:

public class Estudos extends JFrame {
    
        String url    = "jdbc:postgresql://localhost:5432/Banco";
        String usuario= "postgres";
        String senha  = "postgres";
        Connection db = null;
        
  public Estudos()
  {
   // super("Exemplo");
    
    final DefaultTableModel modelo = new DefaultTableModel();
    // constrói a tabela
    JTable tabela = new JTable(modelo);
    JButton botão = new JButton("atualizar");
    // Cria duas colunas
    modelo.addColumn("Código");
    modelo.addColumn("Nome");
    // exibe os dados da tabela MySQL
    try{
        Class.forName("org.postgresql.Driver");
        db = DriverManager.getConnection( url, usuario, senha );
        // procedimentos para obter os dados de uma tabela
        PreparedStatement ps;
        ps = db.prepareStatement( "select codfunc, nome from tabfuncionario " );
        ResultSet rs = ps.executeQuery();
        while(rs.next()){
            int id = rs.getInt("codfunc");
            String nome = rs.getString("nome");
            modelo.addRow(new Object[]{new Integer(id), nome});
        }
        // fim procedimento para obter os dados
    }
    catch(SQLException ex){
        System.out.println("SQLException: " + ex.getMessage());
        System.out.println("SQLState: " + ex.getSQLState());
        System.out.println("VendorError: " + ex.getErrorCode());
    }
    catch(Exception e){
        System.out.println("Problemas ao tentar conectar com o banco de dados");
    }
    // fim MySQL
    tabela.setPreferredScrollableViewportSize(new Dimension(350, 50));
    Container c = getContentPane();
    c.setLayout(new FlowLayout());
    JScrollPane scrollPane = new JScrollPane(tabela);
    c.add(scrollPane);
    c.add(botão);
    scrollPane.setBounds(770,770,20,20);
    setSize(400, 300);
    setVisible(true);
}

Alguém conhece um tutorial ou pode me dar um exemplo !!!

Separe o método que pega os dados do banco

sempre q vc cadastrar ou excluir um dado do banco recrie a tabela chamando o método novamente
para obter os dados

Vc pode fazer o que o edilson disse, se a acao de update no banco esta sendo acionada pela sua GUI.

Mas uma vez eu tive que fazer isso, mas nao era a minha GUI que estava dando update no banco de dados, na verdade era um servico no meu back-end, a minha JTable tinha que ser atualizada com esse dados entao eu tive que criar um thread que fazia a query no banco buscando por updates.
Usei a classe Timer pra fazer isso, mais ou menos assim :


Timer t1 = new Timer((10000/2), new ActionListener() {
	public void actionPerformed(ActionEvent e) {
		    
	    try {
						
		// aqui vc coloca o codigo pra fazer a query e atualizar a sua JTable.

	    } catch (Exception x) {
		x.printStackTrace();
	    }
		    	    
	}
		
   });    

	
t1.setInitialDelay(0);	
t1.start();

//Daniel

Cara a Table tá rolando legal, atualiza numa boa !

Agora, como posso separar o evento SQL do botão “atualizar” ?
Não tô conseguindo fazer o modelo receber as variáveis !

Antecipadamente, obrigado pela força.

tentei o seguinte:

Minha Tela :

public Tela() {
        super("Exemplo");
     initComponents();
    final DefaultTableModel modelo = new DefaultTableModel();
    final JTable tabela = new JTable(modelo);
    JButton botaoAtualizar = new JButton("atualizar");
    JButton botaoInserir = new JButton("inserir");
    JTextField caixaNome = new JTextField();
    JTextField caixaCodigo = new JTextField();
    modelo.addColumn("Código");
    modelo.addColumn("Nome");
    
    tabela.setPreferredScrollableViewportSize(new Dimension(350, 50));
    Container c = getContentPane();
    setLayout(null);
    JScrollPane scrollPane = new JScrollPane(tabela);
    scrollPane.setBounds(20,20,300,100);
    botaoAtualizar.setBounds(20,150,100,20);
    botaoInserir.setBounds(20,200,100,20);
    caixaNome.setBounds(20,230,100,20);
    caixaCodigo.setBounds(120,230,100,20);
    c.add(scrollPane);
    c.add(botaoAtualizar);
    c.add(botaoInserir);
    c.add(caixaNome);
    c.add(caixaCodigo);
    setSize(400, 300);
    setVisible(true);
    int i=0;
        while(tabela.getRowCount()>0)
            ((DefaultTableModel)tabela.getModel()).removeRow(i);
     
    botaoAtualizar.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e) {
        int i = 0;
       
        while(tabela.getRowCount()>0){
            ((DefaultTableModel)tabela.getModel()).removeRow(i);}
        
        
        eventobotao eb = new eventobotao();
        
        eb.buscar();
        
        }
   }
    );
    } 

Meu Evento do Botão:

[code]
public class eventobotao {

String url    = "jdbc:postgresql://localhost:5432/Banco";
String usuario= "postgres";
String senha  = "postgres";
Connection db = null;
public int id;
public String nome;
public Object conteudo;
 
public eventobotao() {
}

public void buscar(){
    
    try{
    Class.forName("org.postgresql.Driver");
    db = DriverManager.getConnection( url, usuario, senha );
    PreparedStatement ps;
    ps = db.prepareStatement( "select codigo, nome from teste " );
    ResultSet rs = ps.executeQuery();
    while(rs.next()){
        id = rs.getInt("codigo");
        nome = rs.getString("nome");
        
        modelo.setDaddRow(new Object[]{new Integer(id), nome});
     }
 }
catch(SQLException ex){
    System.out.println("SQLException: " + ex.getMessage());
    System.out.println("SQLState: " + ex.getSQLState());
    System.out.println("VendorError: " + ex.getErrorCode());
}
catch(Exception ei){
    System.out.println("Problemas ao tentar conectar com o banco de dados");
}
    }
[/code]