有没有一种(简洁的)方法,而不是获取特定字体大小的高度,而是获取产生给定高度的特定字体(在这种情况下为 SansSerif)的字体大小?
我当然可以循环使用字体大小或使用某种形式的二进制印章,但如果可能的话,我想使用一些更干净、资源更少的东西。我发现最好的方法是使用这样的东西。
有没有一种(简洁的)方法,而不是获取特定字体大小的高度,而是获取产生给定高度的特定字体(在这种情况下为 SansSerif)的字体大小?
我当然可以循环使用字体大小或使用某种形式的二进制印章,但如果可能的话,我想使用一些更干净、资源更少的东西。我发现最好的方法是使用这样的东西。
没有简单的方法。
首先,您知道 java 只提供了五个逻辑字体系列。不保证所有其他字体都存在于您将运行该程序的系统中。
那么,不,您的系统上没有自动映射字体的属性。您必须全部加载它们并循环搜索所需的度量。
使用此代码,您可以循环可用的字体:
import java.awt.Font;
import java.awt.GraphicsEnvironment;
public class MainClass {
public static void main(String[] a) {
GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();
Font[] fonts = e.getAllFonts(); // Get the fonts
for (Font f : fonts) {
System.out.println(f.getFontName());
}
}
}
然后选择适合您需求的那一款。更改代码以显示您想要的信息:例如重量。
编辑:注意http://download.oracle.com/javase/1.3/docs/guide/intl/addingfonts.htmlThey are merely font-type names recognized by the Java runtime which must be mapped to some physical font that is installed on your system
中的观察。
即使是逻辑字体也不保证总是相同的。您可以做的是获取 10pt 的大小并计算字体大小。喜欢
font_size_in_points = ((10 *desired_measure) / equivalent_measure_of_the_10pt)
搜索时TextLayout
,显示在此处和此处,将为给定文本提供最严格的界限。
FontMetrics metric = new FontMetrics(new Font("font"), Font.BOLD, 12);
metrics.getHeight()
Might be what you are looking for.
More info: http://download.oracle.com/javase/6/docs/api/java/awt/FontMetrics.html