我正在使用Marquee JPanel,我正在使用JLabel通过在JPanel中减少JLabel的Y来滚动JPanel中的Text。
问题是我需要JLabel的特定宽度,其中高度不重要,因为它将滚动文本,直到JLabel的Y为>比-JLabel.Height这意味着JLabel的最后一行文字位于JPanel的顶部。
那么如何根据特定的宽度值来计算可以容纳某种文本的高度。
例如。 如果JLabel的宽度是50,那么高度应该是可以适合文本的值,如果文本是“Bla bla bla some text over ...”并且字体是“Serif”,Font.ITALIC,20
答案 0 :(得分:3)
尽管有人回答,但我认为我会提供另一种方法。这个替代归结为“将文本放在HTML格式的标签中”。这种方法的优点是通常可以自动处理换行符,而不必担心每行中断的位置。 E.G。
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]
答案 1 :(得分:2)
您可能需要查看FontMetrics类,它具有根据字体大小获取字体属性的方法,如高度,宽度,上升等。根据这些信息,您应该能够计算出相对于宽度的特定字体/大小的高度,反之亦然。
答案 2 :(得分:1)
您从Dimension
返回的getPreferredSize()
在您致电pack()
或validate()
后随时有效。