尽管如此,我还是认为我会提供另一种方法.这个替代归结为“将文本放在HTML格式的标签中”.这种方法的优点是通常可以自动处理换行符,而不必担心每行中断的位置.例如.
import javax.swing.*;
class HeightOfFixedWidthText {
public static void show(String s) {
JLabel l = new JLabel(s);
l.setSize(l.getPreferredSize());
JOptionPane.showMessageDialog(null, l);
System.out.println(l.getSize());
}
public static void main(String[] srgs) {
String s = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eu nulla urna. Donec sit amet risus nisl, a porta enim. Quisque luctus, ligula eu scelerisque gravida, tellus quam vestibulum urna, ut aliquet sapien purus sed erat. Pellentesque consequat vehicula magna, eu aliquam magna interdum porttitor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed sollicitudin sapien non leo tempus lobortis. Morbi semper auctor ipsum, a semper quam elementum a. Aliquam eget sem metus.";
String html1 = "
"style='font-family: Serif; font-style: italic; font-size: 20px; padding: 0px; margin: 0px;" +
" width: ";
String html2 = "px'>";
String html3 = "";
show(html1+"200"+html2+s+html3);
show(html1+"300"+html2+s+html3);
}
}
产量
java.awt.Dimension[width=260,height=884]
java.awt.Dimension[width=390,height=544]
警告
>为了获得显示文本所需的最小尺寸,可能需要删除该HTML正文中的一些(更多)填充.留下作为用户的练习.
> Swing的HTML格式以使文本的“基线”错误而臭名昭着.如果文本内容包括低于文本通常基线的子脚本之类的内容,则可能会计算.在这个用例中似乎不会出现问题.
>我只是注意到虽然宽度被指定为200然后是300,但结果又回到260& 390.我可以理解两者之间的差异是否恒定(要删除的额外填充),但是对于每个标签的不同之处我感到非常困惑.