Problema com retorno de dados em tabela com scroll

Oi.

Não é bem um problema. Eu estou conseguindo realizar a tarefa com sucesso.

É assim: Uma das abas de uma tela mostram os dados de animais cadastrados na tabela.
Só que quando clico em atualizar, os dados são setados de novo, só que o painel também é, e se depois disso o usuário maximizar a tela, vai ficar um erro horrível sobre ela.

Visualização:

codigo:

[code] private void buscaTabela3() {
/** inicialização de conexão ao banco ****/

 new conexao();
 Statement st3;   
 ResultSet rs3;  
 
  String url3 = "jdbc:mysql://localhost/gado";   
  String usuario3 = "root";   
  String senha3   = "2017"; 
  
 try { 
  con3 = DriverManager.getConnection(url3, usuario3, senha3);

   Vector cabecalho3 = new Vector();
   Vector linhas3 = new Vector();
    st3 = con3.createStatement();   

// Selecionando apenas vacinas ****
rs3 = st3.executeQuery(
“SELECT nomeVacina as ‘Tipo de vacina’, descricao as ‘Descricao’ FROM nomeVacinas”);
//"Vacinas v WHERE v.codproduto NOT IN (SELECT v.codprod FROM vendas v) ");
rs3.next();
ResultSetMetaData rsmd3 = rs3.getMetaData();

        for (int i3 = 1; i3 <= rsmd3.getColumnCount(); ++i3)   
           cabecalho3.addElement(rsmd3.getColumnName(i3)); 
        do {   
           linhas3.addElement(proximaLinha3(rs3, rsmd3)); 
        } 
        while (rs3.next());  
        
        tabela3 = new JTable(linhas3, cabecalho3);
        tabela3.setFont( f );
        scroller3 = new JScrollPane(tabela3);       
        p3.add(scroller3, BorderLayout.CENTER);
       
        validate();   
        st3.close(); 
        
     } catch (SQLException sqlex3) {
         JOptionPane.showMessageDialog(null, "Erro ao retornar dado!\n" + sqlex3,
         "Erro", JOptionPane.ERROR_MESSAGE);   
     }   
  }   
   
  private Vector proximaLinha3(ResultSet rs3, ResultSetMetaData rsmd3) {   
      
     Vector LinhaAtual3 = new Vector(); 
     try {   
              LinhaAtual3.addElement(rs3.getString("Tipo de vacina"));
              LinhaAtual3.addElement(rs3.getString("Descricao"));  

    } catch (SQLException sqlex5) { 
         JOptionPane.showMessageDialog(null, "Erro ao retornar dado!\n" + sqlex5,
         "Erro", JOptionPane.ERROR_MESSAGE);    
    } catch (Exception ex5) { 
         JOptionPane.showMessageDialog(null, "Erro inesperado!\n" + ex5,
         "Erro", JOptionPane.ERROR_MESSAGE);
   } 
     return LinhaAtual3;   
     
  }  // fim do vect[/code]

Ajuda?

Obrigado.

Tive problemas similares na atualização de dados em swing…normalmente reolvo usando o updateUI, tenta adicionar pra ver nq da

Tentei usar sim, só que não aiantou nada.

[code] private void buscaTabela3() {
/** inicialização de conexão ao banco ****/

 new conexao();
 Statement st3;   
 ResultSet rs3;  
 
  String url3 = "jdbc:mysql://localhost/gado";   
  String usuario3 = "root";   
  String senha3   = "2017"; 
  
 try { 
  con3 = DriverManager.getConnection(url3, usuario3, senha3);

   Vector cabecalho3 = new Vector();
   Vector linhas3 = new Vector();
    st3 = con3.createStatement();   

// Selecionando apenas vacinas ****
rs3 = st3.executeQuery(
“SELECT nomeVacina as ‘Tipo de vacina’, descricao as ‘Descricao’ FROM nomeVacinas”);
//"Vacinas v WHERE v.codproduto NOT IN (SELECT v.codprod FROM vendas v) ");
rs3.next();
ResultSetMetaData rsmd3 = rs3.getMetaData();

        for (int i3 = 1; i3 <= rsmd3.getColumnCount(); ++i3)   
           cabecalho3.addElement(rsmd3.getColumnName(i3)); 
        do {   
           linhas3.addElement(proximaLinha3(rs3, rsmd3)); 
        } 
        while (rs3.next());  
        
        tabela3 = new JTable(linhas3, cabecalho3);
        tabela3.setFont( f );
        
        tabela3.setBackground(java.awt.Color.white);   
        tabela3.revalidate();   
        tabela3.setBorder(new javax.swing.border.SoftBevelBorder(0)); 

        tabela3.updateUI();
        
        scroller3 = new JScrollPane(tabela3); 
        scroller3.updateUI();
        p3.add(scroller3, BorderLayout.CENTER);
        p3.updateUI();
       
        validate();   
        st3.close(); 
        
     } catch (SQLException sqlex3) {
         JOptionPane.showMessageDialog(null, "Erro ao retornar dado!\n" + sqlex3,
         "Erro", JOptionPane.ERROR_MESSAGE);   
     }   
  }   
   
  private Vector proximaLinha3(ResultSet rs3, ResultSetMetaData rsmd3) {   
      
     Vector LinhaAtual3 = new Vector(); 
     try {   
              LinhaAtual3.addElement(rs3.getString("Tipo de vacina"));
              LinhaAtual3.addElement(rs3.getString("Descricao"));  

    } catch (SQLException sqlex5) { 
         JOptionPane.showMessageDialog(null, "Erro ao retornar dado!\n" + sqlex5,
         "Erro", JOptionPane.ERROR_MESSAGE);    
    } catch (Exception ex5) { 
         JOptionPane.showMessageDialog(null, "Erro inesperado!\n" + ex5,
         "Erro", JOptionPane.ERROR_MESSAGE);
   } 
     return LinhaAtual3;   
     
  }  // fim do vector  [/code]