Я хочу создать диалоговое окно, содержащее какой-то текстовый элемент (JLabel/JTextArea и т. Д.), Который многолирован и завершает слова. Я хочу, чтобы диалог имел фиксированную ширину, но изменял высоту в зависимости от того, насколько большой текст. У меня есть этот код:Получите высоту многострочного текста с фиксированной шириной, чтобы изменить размер диалогового окна
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);
}
});
}
}
При запуске программы она выглядит следующим образом: alt text http://lesc.se/stackoverflow/multiline_size_1.png
Но я хотел бы, чтобы диалог выглядеть следующим образом (как при нажатии кнопки пакета): alt text http://lesc.se/stackoverflow/multiline_size_2.png
Я предполагаю, что проблема заключается в том, что менеджер макета не смог определить правильную высоту текста, прежде чем отображать его на экране. Я пробовал различные validate(), invalidate(), validateTree() и т. Д., Но не удалось.
Выдает ли HTML-теги? Нет! – Soley