Uzyskaj wysokość tekstu wielowierszowego o stałej szerokości, aby poprawnie zmienić rozmiar okna dialogowego

Chcę utworzyć okno dialogowe zawierające jakiś element tekstowy (JLabel / JTextArea itp.), Który jest wielowierszowy i zawija słowa. Chcę, aby okno dialogowe miało stałą szerokość, ale dostosuj wysokość w zależności od wielkości tekstu. Mam ten kod:

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

Podczas uruchamiania programu wygląda to tak:alt tekst http://lesc.se/stackoverflow/multiline_size_1.png

Ale chciałbym, żeby okno wyglądało tak (jak po naciśnięciu przycisku spakowania):alt tekst http://lesc.se/stackoverflow/multiline_size_2.png

Zgaduję, że problem polega na tym, że menedżer layoutu nie był w stanie określić właściwej wysokości tekstu przed wyświetleniem go na ekranie. Próbowałem różnych validate (), invalidate (), validateTree () itp., Ale nie udało się.

questionAnswers(3)

yourAnswerToTheQuestion