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 ajuste las palabras. Quiero que el cuadro de diálogo tenga un ancho fijo, pero adapte la altura según el tamaño del texto. Tengo este código:Obtener la altura del texto de varias líneas con ancho fijo para hacer que el tamaño del diálogo sea correcto
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);
}
});
}
}
Cuando se ejecuta el programa se ve así: alt text http://lesc.se/stackoverflow/multiline_size_1.png
Pero me gustaría que el diálogo con el siguiente aspecto (como cuando se pulsa el botón de paquete): alt text http://lesc.se/stackoverflow/multiline_size_2.png
Supongo que el problema es que el administrador de diseño no ha podido determinar la altura correcta del texto antes de mostrarlo en la pantalla. He intentado varios validate(), invalidate(), validateTree() etc. pero no he tenido éxito.
¿Rinde etiquetas HTML? ¡No! – Soley