Ich muss meine JPanel-Größe dynamisch ändern, wenn neue Komponenten hinzugefügt werden

Ich muss Benutzern erlauben, meinem JFrame weitere Textfelder hinzuzufügen, damit ein Bildlauffenster angezeigt wird, sobald die Größe des Frames seinen ursprünglichen Wert überschritten hat. Da ich JScrollPane nicht zu JFrame hinzufügen kann, um den Bildlauf zu aktivieren, habe ich beschlossen, das JPanel zu aktivieren den JFrame und übergeben Sie das JPanel-Objekt an den JScrollPane-Konstruktor. Das Scrollen funktioniert nun einwandfrei, jedoch nur bis zum Rand des JPanels. Die Sache ist, dass die Größe von JPanel unverändert bleibt und nicht dynamisch gedehnt wird. Was passiert, ist, dass die Schaltflächen in meinem Code den gesamten Speicherplatz des JPanel in der Größe von 300 x 300 belegen. Ich möchte jedoch, dass JPanel gedehnt wird, sobald diese Steuerelemente den ursprünglichen Speicherplatz belegt haben. Bitte beraten.

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

    }
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage