TableModel não exibe todos os registros do Banco

Pessoal

Como relatei antes, estou postando o meu problema novamente pois da outra forma ficou muito longa a questão para acessar.

Estou tentando entender o q está acontecendo com a minha JTable e não estou conseguindo entender porque:

  1. Fiz uma lista de todos os registros do banco postgres. Ok tenho 58 registros
  2. Fiz uma lista da geração da TableMode com sysout . Ok tenho 58 registros.
  3. Fiz uma lista de saida da geração do PrecoDao. Ok tenho 58 registros.
  4. Na aplicação quando mostro o Relatório de Preços. Ok tenho 58 registros.

Quando mostro a aplicação na JTable só aparece 27 registros. Só que o JScrollPane está funcionando para baixo e para cima. Não sei se é problema do ScrollPane só vai até os 27 registros. O que será que está acontecendo?

Vou postar meu codigo da tablemodel, dao e o trecho da JTable abaixo:

A aplicação:

    private void preencheTbm(){
        PrecoDao dao = null ;
        try {
            dao = new PrecoDao();
            PrecoTableModel minha = new PrecoTableModel(dao.listAll()); 
            jTPreco.setModel(minha);  
            jTPreco.setPreferredSize(new java.awt.Dimension(800, 434));  
            defineRenderers();
            int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER;
            int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS;
            JScrollPane scroller = new JScrollPane(); 
            jScrollPane1.add(scroller);
            jScrollPane1.setViewportView(jTPreco);
           
        } catch (SQLException ex) {
            Logger.getLogger(jIFPrecos.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            dao.closeConnection();
        } catch (SQLException ex) {
            Logger.getLogger(jIFPrecos.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public List<Preco> listAll() throws SQLException {

        List<Preco> lista = new ArrayList<Preco>();

        PreparedStatement stmt = getConnection().prepareStatement(
                "SELECT "
                + "    p.id idpreco, " 
                + "    p.idtipopreco idtipopreco, " 
                + "    p.idprotese idprotese, " 
                + "    p.valor preco, "
                + "    tipopreco.descricao descricaotp,  " 
                + "    protese.nome nomeprotese  " 
                + "FROM "
                + "preco p "
                + " INNER JOIN tipopreco ON (tipopreco.id = idtipopreco)"
                + " INNER JOIN Protese ON (Protese.id = idprotese)"
                + " ORDER BY 1"
                + ";" );

        ResultSet rs = stmt.executeQuery();
        while ( rs.next() ) {

            Preco p = new Preco();
            TipodePreco tp = new TipodePreco();
            Protese pr = new Protese();
            
            p.setIdtipopreco ( rs.getInt( "idtipopreco" ) );
            p.setDescricao (rs.getString("descricaotp"));
            p.setIdprotese ( rs.getInt( "idprotese" ) );
            p.setNomeprotese( rs.getString("nomeprotese"));
            p.setId    ( rs.getInt( "idpreco" ) );
            p.setPreco( rs.getBigDecimal( "preco" ) );

/* Aqui nesse print sai todos os 58 registro do banco
                   System.out.println(" Id. Tipopreco=" + (p.getIdtipopreco().toString()));     
                   System.out.println(" Nome Tipo=" + (tp.getDescricao()));     
                   System.out.println(" Id.Protese=" + (p.getIdprotese().toString()));     
                   System.out.println("Nome Protese=" + (pr.getNome())); */   
                   System.out.println(" Id.=" + (p.getId().toString()));     
 /*                  System.out.println("Preco=" + (p.getPreco()));  */

            lista.add( p );
        }
        rs.close();
        stmt.close();

        return lista;
    }

public class PrecoTableModel extends AbstractTableModel {

    private static final long serialVersionUID = 1L;
    /* Lista de Preco que representam as linhas. */  
    private List<Preco> linhas;  
  
    /* Array de Strings com o nome das colunas. */  
    private String[] colunas = new String[]{  
    " Id.", "Tipo de Tabela                                     ", "Id.", "Descrição da Prótese                                             ", " Id.", "  Valor  "};
    /* Cria um PrecoTableModel vazio. */  
    public PrecoTableModel() { 
        linhas = new ArrayList<Preco>();  
    }  
    /* Cria um PrecoTableModel carregado com 
     * a lista de Preco especificada. */  
    public PrecoTableModel(List<Preco> listaprecos) {  
//System.out.println("passei na PrecoTableModel!");
        this.linhas = new ArrayList<Preco>(listaprecos); 
//System.out.println("linhas=" + linhas.size());     
        
        linhas = new ArrayList<Preco>(listaprecos);
             for (Preco p: linhas){
/*   Aqui quando emito o print sai os 58 registros
                  System.out.println(" Id. Tipopreco=" + (p.getIdtipopreco().toString()));     
                   System.out.println(" Nome Tipo=" + (p.getDescricao()));     
                   System.out.println(" Id.Protese=" + (p.getIdprotese().toString()));     
                   System.out.println("Nome Protese=" + (p.getNomeprotese())); */    
                   System.out.println(" Id.=" + (p.getId().toString()));     
/*                   System.out.println("Preco=" + (p.getPreco()));  */
            }
    }  
    /* Retorna a quantidade de colunas. */  
    @Override  
    public int getColumnCount() {  
        // Esta retornando o tamanho do array "colunas".  
//System.out.println("tamanho da coluna=" +colunas.length);        
        return colunas.length;  
    }  
  
    /* Retorna a quantidade de linhas. */  
    @Override  
    public int getRowCount() {  
        // Retorna o tamanho da lista de Preco.  
//System.out.println("linhas=" + linhas.size());     
        return linhas.size();  
    }  
  
    /* Retorna a quantidade de linhas. */  

    @Override  
    public String getColumnName(int columnIndex) {  
        // Retorna o conteudo do Array que possui o nome das colunas 
//System.out.println("nome da coluna=" +colunas[columnIndex]);     
        return colunas[columnIndex];  
    }  
  
    ;  
  
/* Retorna a classe dos elementos da coluna especificada.
	 * Este método é usado pela JTable na hora de definir o editor da célula. */
	@Override
	public Class<?> getColumnClass(int columnIndex) {
		// Retorna a classe referente a coluna especificada.
		// Aqui é feito um switch para verificar qual é a coluna
		// e retornar o tipo adequado. As colunas são as mesmas
		// que foram especificadas no array "colunas".
		switch (columnIndex) {
		case 0: // Primeira coluna é o nome, que é uma String.
			return Integer.class;
		case 1: // Segunda coluna é o telefone, que também é uma String..
			return String.class;
		case 2: // Terceira coluna é a data de cadastro,
				// apesar de ser do tipo Calendar,
				// estou retornando Degerate por causa da formatação.
			return Integer.class;
		case 3: // Quarta coluna é a mensalidade, um double.
			return String.class;
		case 4: // Quarta coluna é a mensalidade, um double.
			return Integer.class;
		case 5: // Quarta coluna é a mensalidade, um double.
			return Double.class;
		default:
			throw new IndexOutOfBoundsException("ERRO. Coluna fora do limite - ClassPreco!");
		}
	}
  
    ;  
  
    @Override  
    public Object getValueAt(int rowIndex, int columnIndex) {  
            Preco preco = linhas.get(rowIndex);  
        switch (columnIndex) {  
  
            // Seguindo o exemplo: "Tipo","Data de Cadastro", "Nome", "Idade"};  
            case 0:  
                return preco.getIdtipopreco();  
            case 1:  
                return preco.getDescricao();  
            case 2:  
                return preco.getIdprotese();  
            case 3:  
                return preco.getNomeprotese();  
            case 4:  
                return preco.getId();  
            case 5:  
                return preco.getPreco();  
            default:  
                // Isto não deveria acontecer...  
                throw new IndexOutOfBoundsException("Erro - columnIndex fora de limite GetPreco!");  
        }  
    }  
  
@Override  
//modifica na linha e coluna especificada  
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {  
      Preco Preco = linhas.get(rowIndex); // Carrega o item da linha que deve ser modificado  
  
     switch (columnIndex) { // Seta o valor do campo respectivo  
         case 0:  
//             Preco.setGrupoPreco(aValue.toString());  
          case 1:  
//             Preco.setGrupoPreco(aValue.toString());  
         case 2:  
//             Preco.setId(aValue.toString());  
         case 3:  
//             Preco.setNome(aValue.toString());  
         case 4:  
//             Preco.setPrazo(aValue.toString());  
         case 5:  
//             Preco.setPrazo(aValue.toString());  
  
         default:  
             // Isto não deveria acontecer...               
     }  
     fireTableCellUpdated(rowIndex, columnIndex);  
     }  
  
    //modifica na linha especificada  
    public void setValueAt(Preco aValue, int rowIndex) {  
        Preco preco = linhas.get(rowIndex); // Carrega o item da linha que deve ser modificado  
  
        preco.setPreco(rowIndex);  
  
        fireTableCellUpdated(rowIndex, 5);  
  
    }  
    ;  
  
  
    ;  
  
    @Override  
    public boolean isCellEditable(int rowIndex, int columnIndex) {  
        return false;  
    }  
  
    public Preco getPreco(int indiceLinha) {  
        return linhas.get(indiceLinha);  
    }  
  
    /* Adiciona um registro. */  
    public void addPreco(Preco m) {  
        // Adiciona o registro.  
        linhas.add(m);  
  
        int ultimoIndice = getRowCount() - 1;  
  
        fireTableRowsInserted(ultimoIndice, ultimoIndice);  
    }  
  
    /* Remove a linha especificada. */  
    public void removePreco(int indiceLinha) {  
        linhas.remove(indiceLinha);  
  
        fireTableRowsDeleted(indiceLinha, indiceLinha);  
    }  
  
    /* Adiciona uma lista de Preco ao final dos registros. */  
    public void addListaDePreco(List<Preco> Preco) {  
        // Pega o tamanho antigo da tabela.  
        int tamanhoAntigo = getRowCount();  
  
        // Adiciona os registros.  
        linhas.addAll(Preco);  
  
        fireTableRowsInserted(tamanhoAntigo, getRowCount() - 1);  
    }  
  
    /* Remove todos os registros. */  
    public void limpar() {  
        linhas.clear();  
  
        fireTableDataChanged();  
    }  
  
    /* Verifica se este table model esta vazio. */  
    public boolean isEmpty() {  
        return linhas.isEmpty();  
    }

    public void setVisible(boolean b) {
        
    }
}

nazaocta,

Pelo que vc informou o DAO está te retornando a quantidade certa e o table model está recebendo e tratando essa quantidade de registros, ok.
No trecho abaixo me confirme: vc usa 2 ScrollPanel’s um interno ao outro ? É preciso mesmo?

 JScrollPane scroller = new JScrollPane();   
 jScrollPane1.add(scroller);  
 jScrollPane1.setViewportView(jTPreco); 

Outro ponto : no método defineRenderers tem algo que possa restringir os registros num metodo de um TableCellRender ou TableCellEditor?
Vc usa preencheTbm() ao criar a tela (somente uma vez) ou toda vez que clica num botão ? Se for o 2º caso, vc não precisa setar setPreferredSize,setViewportView e coisas referentes a formatação, se não é esse o seu caso está ok.
Dê mais detalhes da tela , de repente posso tentar reproduzir o erro aki…