Necesito hacer que mi JPanel cambie de tamaño dinámicamente a medida que se le agreguen nuevos componentes.

Debo permitir que los usuarios agreguen más campos de texto a mi JFrame, por lo que una vez que el tamaño del marco haya excedido su valor original, aparecerá un panel de desplazamiento. Como no puedo agregar JScrollPane a JFrame para habilitar el desplazamiento, decidí poner el JPanel JFrame y pase el objeto JPanel al constructor JScrollPane. El desplazamiento ahora funciona bien, pero solo hasta que haya alcanzado los límites del JPanel. La cosa es que el tamaño de JPanel se mantiene como está y no se estira dinámicamente. Lo que sucede es que los botones de mi código están utilizando todo el espacio del JPanel con el tamaño de 300x300, pero lo que quiero hacer es que el JPanel se estire una vez que estos controles hayan agotado su espacio original. Por favor avise.

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

    }
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta