title: Why JScrollPane in JOptionPane not showing all its content?
body: <p>I am trying to add components to a JPanel, then put this panel into a JScrollPane, then put the JScrollPane in  JOptionPane.</p>
  
  <p>The problem: only 19 line of components added. There is a for-loop that determine the number of lines of components, if you change the condition counter to 19 or less then all of them will be displayed.</p>
  
  <p>This is an SSCCE of the problem</p>
  
  <pre><code>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 &lt; 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 &lt; num; i++)
          {
              sequentialGroupVert.addGroup(layout.createParallelGroup().
                      addComponent(LabelsArray[i])
                      .addComponent(FieldsArray[i]));
          }
          sequentialGroupVert.addComponent(addRecordButton);
  
          for (int i = 0; i &lt; 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();
      }
  }
  </code></pre>