Rozmiar JScrollPane w JTabbedPane w JFrame

Rozumiem po tym pościeNie ustawiaj rozmiarów na JComponent że nie ustawiasz preferowanych rozmiarów na żadnym komponencie, a zamiast tego pozwala menedżerowi układu zrobić to za Ciebie.

Moje pytanie brzmi: mam JPanel, który umieściłem w JTabbedPane w JFrame w ten sposób

JFrame frame=new JFrame(); 
JTabbedPane pane=new JTabbedPane();
pane.addTab("Tab 1",new JScrollPane(getJPanel1()));
pane.addTab("Tab 2",new JScrollPane(getJPanel2()));
frame.setContentPane(pane);

Teraz w tym przypadku JTabbedPane zajmie rozmiar komponentu o maksymalnym rozmiarze, który do niego dodasz. Z tego powodu mój JScrollPane w ogóle się nie wyświetla. Muszę ustawić preferowany rozmiar JScrollPane, jeśli go nie ustawię, paski przewijania nie pojawią się, a zawartość zostanie wycięta.

Jak użyć menedżera układu do rozwiązania tego problemu. Chcę to zrobić specjalnie:

Ustaw JFrame / JTabbedPane / JPanelInTab na wysokość ekranu (biorąc pod uwagę pasek zadań okien), jeśli zawartość karty ma zostać wycięta, paski przewijania powinny się pojawić. Szerokość ramki powinna pasować dokładnie tak samo jak JTabbedPane.

EDYTOWAĆ

Oto MVCE, który pokazuje, co próbuję zrobić. Wprowadziłem zmiany zgodnie z sugestią peeskillet, ale nie ma to żadnego efektu

import javax.swing.*;
import java.awt.*;

public class ScrollPaneTest {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame=new JFrame();
                frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

                JTabbedPane tabbedPane=new JTabbedPane();

                tabbedPane.addTab("Tab 1", wrapWithBorderLayoutPanel(getPanel()));
                tabbedPane.addTab("Tab 2", wrapWithBorderLayoutPanel(getPanel()));
//
//                tabbedPane.addTab("Tab 1", new JScrollPane(getPanel()));
//                tabbedPane.addTab("Tab 2", new JScrollPane(getPanel()));

                frame.setContentPane(tabbedPane);
                frame.pack();
                frame.setVisible(true);
            }

            private JPanel wrapWithBorderLayoutPanel(JPanel panel) {
                JPanel borderLayoutPanel=new JPanel(new BorderLayout());
                borderLayoutPanel.add(new JScrollPane(panel), BorderLayout.CENTER);
                return borderLayoutPanel;
            }

            private JPanel getPanel() {
                JPanel panel=new JPanel();
                Box box = Box.createVerticalBox();
                for (int i = 1; i <= 100; i++) {
                    box.add(new JLabel("This is Label #" + i));
                }
                panel.add(box);
                return panel;
            }
        });
    }

}

Kiedy to zrobię, poniżej przedstawiam dane wyjściowe. Ramka nie kończy się na pasku zadań. Rozciąga się za nim. Ostatnia etykieta jest ukryta za paskiem zadań. Chciałbym, aby ramka się skończyła, zanim zacznie się pasek zadań.

PS: Nie ma zmiany, jeśli zawinę panel z panelem BorderLayout lub dodaję panel przewijania bezpośrednio do panelu z zakładkami. Oba skutkują tym samym. Możesz to sprawdzić, komentując linie

           //tabbedPane.addTab("Tab 1", wrapWithBorderLayoutPanel(getPanel()));
            //tabbedPane.addTab("Tab 2", wrapWithBorderLayoutPanel(getPanel()));

            tabbedPane.addTab("Tab 1", new JScrollPane(getPanel()));
            tabbedPane.addTab("Tab 2", new JScrollPane(getPanel()));

questionAnswers(2)

yourAnswerToTheQuestion