Eu preciso fazer o meu JPanel redimensionar dinamicamente como novos componentes estão sendo adicionados a ele

Eu preciso deixar os usuários adicionar mais campos de texto para o meu JFrame assim que o tamanho do quadro excedeu o valor original que um painel de rolagem entraria. Como não posso adicionar JScrollPane ao JFrame para ativar a rolagem, decidi colocar o JPanel em o JFrame e passar o objeto JPanel para o construtor JScrollPane. A rolagem agora funciona bem, mas apenas até atingir as bordas do JPanel. A coisa é o tamanho do JPanel fica como está e não está se alongando dinamicamente. O que acontece é que os botões no meu código estão usando todo o espaço do JPanel sendo do tamanho de 300x300, mas o que eu quero fazer é ter o JPanel estendido assim que esses controles esgotarem seu espaço original. Por favor informar.

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Rectangle;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;


public class Skrol {
    public static void main(String[] args) {


        JFrame f = new JFrame();
        f.setLayout(new FlowLayout());
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel p = new JPanel();


        p.setPreferredSize(new Dimension(400,400));



        JScrollPane jsp = new JScrollPane(p);

        jsp.setPreferredSize(new Dimension(300,300));
        jsp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        jsp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);

            for(int i=0;i<100;i++)
                {
                    JButton b = new JButton("Button "+i);
                    p.add(b);
                }
        f.add(jsp);
        f.setSize(new Dimension(600,600));
        f.setLocation(300, 300);
        f.setVisible(true);

    }
}