Alguns componentes continuam sem aparecer no meu JScrollPane

Eu to fazendo um programa que lista pokemons, so que quando eu vou descendo com o Scroll chega um momento que o ScrollPane entende que não tem mais conteúdo para mostrar mesmo tendo mais pokemons em baixo.Não consigo achar ninguém que teve o mesmo problema. Me ajudem por favor.

Esse é o código:

public class TelaInicial extends JFrame{
    
	private JPanel Painel;
	private JScrollPane scrollPane;
	private ArrayList<Pokemon> pokemonLista;
	private Dimension dimension;
	
    public TelaInicial(ArrayList<Pokemon> pokemonLista){
        super("Pokédex");
        
        this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        this.setSizeJFrame();
        this.setLocationRelativeTo(null);
        this.getContentPane().setLayout(new BorderLayout());
        
        this.pokemonLista = pokemonLista;
        
    	criaPainel();
        listaPokemons();
    	criaScrollPane();
        
        setVisible(true);
    }
    
    public void setSizeJFrame() {
    	DisplayMode tamanho = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDisplayMode();
    	int width = (int) (tamanho.getWidth()/1.7);
    	int height = (int) (tamanho.getHeight()/1.1);
    	this.dimension = new Dimension(width, height);
    	
    	this.setSize(this.dimension);
    }
    
    public void criaScrollPane() {
    	this.scrollPane = new JScrollPane(this.Painel);
    	
    	this.add(this.scrollPane, BorderLayout.CENTER);
    }
    
    public void criaPainel() {
    	this.Painel = new JPanel();
    	this.Painel.setPreferredSize(this.dimension);
    }
    
    public Image criaImagemPokemon(String caminho) {

    	ImageIcon img = new ImageIcon(getClass().getResource(caminho));
    	Image newImg = img.getImage().getScaledInstance(140, 140, java.awt.Image.SCALE_SMOOTH);
    	
    	return newImg;
    }
    
    public void criaJButtonPokemon(Image img) {
    	
    	JButton botao = new JButton();
        botao.setIcon(new ImageIcon(img));
        
        /*botao.setHorizontalTextPosition(SwingConstants.CENTER);
        botao.setForeground(Color.WHITE);
        botao.setFont(new Font("Arial", Font.BOLD, 40));
        botao.setMargin(new Insets(0, 0, 0, 0));
        botao.setBorder(null);
        botao.setOpaque(false);
        botao.setContentAreaFilled(false);
        botao.setBorderPainted(false);
        */
        
        this.Painel.add(botao);
    	
    }
    
    public void listaPokemons(){
    	String caminhoImg = "../imagensPokemon/";
    	
    	for(int i=0;i<30;i++) {
    	for(Pokemon poke: this.pokemonLista) {
    		Image img = criaImagemPokemon(caminhoImg+poke.getId()+".png");
    		criaJButtonPokemon(img);
    	}
    	}
    }
}