Почему JScrollPane в JOptionPane не показывает весь его контент?

Я пытаюсь добавить компоненты в JPanel, затем поместить эту панель в JScrollPane, а затем поместить JScrollPane в JOptionPane.

Проблема: добавлено только 19 линейных компонентов. Существует цикл for, который определяет количество строк компонентов. Если вы измените счетчик условий на 19 или меньше, будут отображены все из них.

Это SSCCE проблемы

import java.awt.Dimension;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

public class DynamicGroupLayout extends JPanel
{

    JButton addRecordButton;
    JTextField[] FieldsArray;
    JLabel[] LabelsArray;
    GroupLayout layout;
    JScrollPane scrollPane;

    public DynamicGroupLayout()
    {
        addRecordButton = new JButton("add record");
        layout = new GroupLayout(this);
        this.setLayout(layout);
        layout.setAutoCreateGaps(true);
        layout.setAutoCreateContainerGaps(true);

        scrollPane = new JScrollPane(this);
        scrollPane.getVerticalScrollBar().setUnitIncrement(16);
        scrollPane.setPreferredSize(this.getPreferredSize());

        setTextFields();
        showDialog();
    }

    @Override
    public Dimension getPreferredSize()
    {
        return new Dimension(400, 500);
    }

    private void setTextFields()
    {
        int num = 30;  //If 19 or less, all components shown.
        String[] labelsNames =
        {
            "1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
            "11", "12", "13", "14", "15", "16", "17", "18", "19", "20",
            "21", "22", "23", "24", "25", "26", "27", "28", "29", "30"
        };
        FieldsArray = new JTextField[num];
        LabelsArray = new JLabel[num];

        GroupLayout.ParallelGroup parallelGroupHoriz = layout.createParallelGroup();
        layout.setHorizontalGroup(layout.createSequentialGroup().addGroup(parallelGroupHoriz));
        for (int i = 0; i < num; i++)
        {
            System.out.println(i);
            LabelsArray[i] = new JLabel(labelsNames[i]);
            FieldsArray[i] = new JTextField(10);
            FieldsArray[i].setMaximumSize(new Dimension(200, 3));
            LabelsArray[i].setLabelFor(FieldsArray[i]);
            parallelGroupHoriz.addGroup(layout.createSequentialGroup()
                    .addComponent(LabelsArray[i])
                    .addComponent(FieldsArray[i]));
        }
        parallelGroupHoriz.addComponent(addRecordButton, GroupLayout.Alignment.CENTER);

        GroupLayout.SequentialGroup sequentialGroupVert = layout.createSequentialGroup();

        layout.setVerticalGroup(sequentialGroupVert);
        for (int i = 0; i < num; i++)
        {
            sequentialGroupVert.addGroup(layout.createParallelGroup().
                    addComponent(LabelsArray[i])
                    .addComponent(FieldsArray[i]));
        }
        sequentialGroupVert.addComponent(addRecordButton);

        for (int i = 0; i < num; i++)
        {
            layout.linkSize(SwingConstants.HORIZONTAL, LabelsArray[i], LabelsArray[0]);
        }
    }

    private void showDialog()
    {
        JOptionPane.showOptionDialog(null, scrollPane, "Update data",
                JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null,
                null, null);
    }

    public static void main(String[] args)
    {
        DynamicGroupLayout d = new DynamicGroupLayout();
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос