Obtenga la altura del texto de varias líneas con un ancho fijo para hacer que el diálogo cambie de tamaño correctamente

Quiero crear un cuadro de diálogo que contenga algún tipo de elemento de texto (JLabel / JTextArea, etc.) que tenga varias líneas y incluya las palabras. Quiero que el cuadro de diálogo tenga un ancho fijo, pero que adapte la altura según el tamaño del texto. Tengo este codigo

<code>import static javax.swing.GroupLayout.DEFAULT_SIZE;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class TextSizeProblem extends JFrame {
  public TextSizeProblem() {

    String dummyString = "";
    for (int i = 0; i < 100; i++) {
      dummyString += " word" + i;  //Create a long text
    }
    JLabel text = new JLabel();
    text.setText("<html>" + dummyString + "</html>");

    JButton packMeButton = new JButton("pack");
    packMeButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        pack();
      }
    });

    GroupLayout layout = new GroupLayout(this.getContentPane());
    getContentPane().setLayout(layout);
    layout.setVerticalGroup(layout.createParallelGroup()
        .addComponent(packMeButton)
        .addComponent(text)
    );
    layout.setHorizontalGroup(layout.createSequentialGroup()
        .addComponent(packMeButton)
        .addComponent(text, DEFAULT_SIZE, 400, 400) //Lock the width to 400
    );

    pack();
  }

  public static void main(String args[]) {
    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        JFrame frame = new TextSizeProblem();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
      }
    });
  }
}
</code>

Al ejecutar el programa se ve así:texto alternativo http://lesc.se/stackoverflow/multiline_size_1.png

Pero me gustaría que el diálogo se vea así (como cuando presionas el botón de paquete):texto alternativo http://lesc.se/stackoverflow/multiline_size_2.png

Supongo que el problema es que el administrador de diseño no pudo determinar la altura adecuada del texto antes de mostrarlo en la pantalla. He intentado varios validate (), invalidate (), validateTree (), etc. pero no he tenido éxito.

Respuestas a la pregunta(3)

Su respuesta a la pregunta