我正在处理Marquee JPanel,并使用JLabel通过减小JPanel内部JLabel的Y来滚动JPanel中的文本。
问题是我需要JLabel的特定宽度,其中Height并不重要,因为它会滚动Text直到JLabel的Y> -JLabel.Height为止,这意味着JLabel的最后一行文本位于JPanel的顶部。
因此,如何根据Width的特定值计算可以容纳某种Text的Height。
例如。
如果JLabel的Width为50,则Height为应该适合文本的值,如果text为“Bla bla bla some text over ...”并且字体为“Serif”,则Font.ITALIC,20
最佳答案
尽管回答了这个问题,但我认为我会提供另一种方法。这种替代方式归结为“将文本放入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 = "<html><body " +
"style='font-family: Serif; font-style: italic; font-size: 20px; padding: 0px; margin: 0px;" +
" width: ";
String html2 = "px'>";
String html3 = "</body></html>";
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]
警告