Holen Sie sich die Höhe von mehrzeiligen text mit fester Breite zu machen Dialogfeld Größe ändern, richtig

Erstellen Sie ein Dialogfeld, das enthält eine Art von text-element (JLabel/JTextArea etc), das ist mehrfach gefüttert und wickeln Sie die Worte. Ich will den dialog zu einer festen Breite, aber die Höhe anpassen, je nachdem, wie groß der text ist. Ich habe diesen 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);
      }
    });
  }
}

Wenn das Programm läuft sieht das so aus:
Holen Sie sich die Höhe von mehrzeiligen text mit fester Breite zu machen Dialogfeld Größe ändern, richtig

(Quelle: lesc.se)

Aber ich möchte, dass der dialog wie folgt Aussehen (wie wenn Sie drücken Sie die pack-button):
Holen Sie sich die Höhe von mehrzeiligen text mit fester Breite zu machen Dialogfeld Größe ändern, richtig

(Quelle: lesc.se)

Ich vermute, dass das problem ist, dass der layout-manager war nicht in der Lage, um zu bestimmen, die richtige Höhe des Textes vor dem anzeigen auf dem Bildschirm. Ich habe verschiedene validate(), invalidate(), validateTree() etc aber nicht gelingen.

Schreibe einen Kommentar