Muszę dynamicznie zmieniać rozmiar JPanela wraz z dodawaniem do niego nowych komponentów

Muszę pozwolić użytkownikom dodawać więcej pól tekstowych do mojej ramki JFrame, aby po przekroczeniu pierwotnej wartości ramki wkroczył panel przewijania. Ponieważ nie mogę dodać JScrollPane do JFrame, aby umożliwić przewijanie, postanowiłem umieścić JPanel na JFrame i przekaż obiekt JPanel do konstruktora JScrollPane. Przewijanie działa teraz dobrze, ale tylko do momentu, gdy osiągnie granicę JPanel. Rzecz w tym, że rozmiar JPanel pozostaje niezmieniony i nie rozciąga się dynamicznie. To, co się dzieje, to przyciski w moim kodzie, które zajmują całą przestrzeń JPanela o rozmiarze 300x300, ale chcę, aby JPanel rozciągnął się, gdy te kontrolki zużyją swoją oryginalną przestrzeń. Proszę doradź.

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);

    }
}

questionAnswers(1)

yourAnswerToTheQuestion