JTable+Resultset

bom galera eh o seguinte, eu criei uma JTable q exibe um Resultset,
faço uma consulta e vou varrendo coluna por coluna do ResultSet e adicionando os objetos na JTable, porem se ( somente se ) meu Resultset tiver menos linhas do q a altura do meu JScrollPane q contem a tabela ele duplica a primeira linha…

tipo… se meu ResultSet retornar menos de 24 linhas ele duplica a primeira, caso contraio ele exibe os dados corretamente

me ajudem, não sei pq isso ta acontecendo… ja tentei atribuir null para a variavel linha a cada interação do meu while(rs.next()) mais nem adiantou :frowning:

import java.awt.*;
import javax.swing.*;
import java.util.Vector;
import java.sql.*;
import javax.swing.table.*;

public class resultadoJFrame
{
   
   
  // System.out.println(a.linha);
   private String dsn;
   private String dbUser;
   private String dbPassword;
   private Connection bd;
   private Statement st;
   private ResultSet rs;
   private String nome_setor ="";
   private JTable tabela = new JTable();
   
   private float[] soma =new float[2];
   private JLabel tot_act;
   private JLabel tot_comp;
   private JLabel total = new JLabel("Total:");
   private JButton voltar=new JButton("Voltar");
   private JButton imprimir=new JButton("Imprimir");
   JFrame frame =null;
   private StringBuffer dados_imp = new StringBuffer();
   private Vector paginas = new Vector();
        
     
   public void iniciaFrame(String palavra,String tipo_consulta)
   {
       this.nome_setor =nome_setor;
   	
		try{
			
		   	 // Conexão com Access
	        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
	        dsn = "jdbc:odbc:arh";
	        bd = DriverManager.getConnection(dsn, dbUser, dbPassword);
	        st = bd.createStatement();
	        // the query
                ResultSet rs=null;
                if(tipo_consulta.compareToIgnoreCase("setor")==0){
                  rs = st.executeQuery("Select matricula,nome,comp_act,horas_comp from funcionarios where nome_setor like '%"+palavra+"%' and comp_act<>'0,0'");
                }else{
                  rs = st.executeQuery("Select matricula,nome,comp_act,horas_comp from funcionarios where nome like '%"+palavra+"%' and comp_act<>'0,0'");
                }

			// Loop through the ResultSet and transfer in the Model
			java.sql.ResultSetMetaData rsmd = rs.getMetaData();
			int colNo = rsmd.getColumnCount()+1;
			String[] tableColumnsName = {"Item","Matricula","Nome","horas act", "horas comp."}; 
			DefaultTableModel aModel = (DefaultTableModel)tabela.getModel();

			aModel.setColumnIdentifiers(tableColumnsName);

			// Desabilitando o auto resize
		    tabela.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
		    
		    // Manipulando o tamanho das colunas
		    
		    String act="";
		    String comp="";
                    int x=0;
                    Object[] linha = new Object[colNo];
                    
	 		while(rs.next()){
	 		 x++;
                         	// tanks to umit ozkan for the bug fix!
				for(int i=0;i&lt;colNo;i++){
				
                                    if(i%5==0){
                                        linha[0]=String.valueOf(x);
                                        System.out.println(linha[i]);
                                        
                                    }else{
                                        linha[i]=rs.getObject(i);
                                        System.out.println(linha[i]);
                                    }
					if(i&gt;=3&&linha[i]!=null){
						
					String s =(linha[i].toString()).replaceAll(",",".");
					soma[i-3]+=Float.parseFloat(s);
					}
                                
				}
		
				aModel.addRow(linha);
                                /*if(x%50==0){
                                    paginas.add(String.valueOf(dados_imp));
                                    dados_imp.delete(0, dados_imp.length());
                                }
                                
                                dados_imp.append(linha[0]+"  "+linha[1]+"  "+linha[2]+"  "+linha[3]+"  "+linha[4]+"  "+"\n");*/
			}
                        
                        if(dados_imp.length()>0){
                             paginas.add(String.valueOf(dados_imp));
                        }
		
			tabela = new JTable(aModel);
	  	   	
		}
		catch(Exception e){
			e.printStackTrace();
		}
 		 
 		
   	  
      JScrollPane painel = new JScrollPane(tabela);
      frame = new JFrame("Consulta dos prestadores");
      frame.getContentPane().setLayout(null);
      
          int width = 0;
          TableColumn col=null;
          for(int vColIndex = 0; vColIndex<5;vColIndex++){

              col = tabela.getColumnModel().getColumn(vColIndex);
              if(vColIndex==0){
                  col.setPreferredWidth(30);
              }else{
                  if(vColIndex==2){
                      col.setPreferredWidth(160);
                      System.out.println("160");

                  }else{

                      col.setPreferredWidth(40);
                      System.out.println("40");
                  }
              }
          }
          
          tot_act = new JLabel(String.valueOf(soma[0]).substring(0,String.valueOf(soma[0]).indexOf(".")+2));
          tot_comp = new JLabel(String.valueOf(soma[1]).substring(0,String.valueOf(soma[1]).indexOf(".")+2));
	 	    	    
          voltar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                actionVoltar(evt);
            }
        });
         imprimir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                actionImprimir(evt);
            }
        });
         
         
     
      frame.getContentPane().add(painel);
      frame.getContentPane().add(tot_act);
      frame.getContentPane().add(tot_comp);
      frame.getContentPane().add(total);
      frame.getContentPane().add(voltar);
     // frame.getContentPane().add(imprimir);
      
      total.setBounds(300,420,60,15);
      tot_act.setBounds(360,420,50,15);
      tot_comp.setBounds(440,420,50,15);
      voltar.setBounds(80,420,100,20);
      //imprimir.setBounds(190,420,100,20);
      
      painel.setBounds(10,10,500,400);
       
      frame.setSize(530,480);
      frame.show();
    }
   
   private void actionVoltar(java.awt.event.ActionEvent evt) {                                          
       frame.dispose();
   }
   private void actionImprimir(java.awt.event.ActionEvent evt) {                                          
       
       new ImprimirResultado(paginas);
       
   }
       
      public static void main(String args[])
      {         
         resultadoJFrame cn = new resultadoJFrame();         
         cn.iniciaFrame("nucap","setor");
      }
      
      
}