【发布时间】:2011-08-25 14:17:51
【问题描述】:
有没有一种(简洁的)方法,而不是获取特定字体大小的高度,而是获取产生给定高度的特定字体(在本例中为 SansSerif)的字体大小?
我当然可以循环使用字体大小或使用某种形式的二进制印章,但如果可能的话,我想使用一些更清洁且资源消耗更少的东西。我发现最好的方法是使用 this 之类的东西。
【问题讨论】:
标签: java fontmetrics
有没有一种(简洁的)方法,而不是获取特定字体大小的高度,而是获取产生给定高度的特定字体(在本例中为 SansSerif)的字体大小?
我当然可以循环使用字体大小或使用某种形式的二进制印章,但如果可能的话,我想使用一些更清洁且资源消耗更少的东西。我发现最好的方法是使用 this 之类的东西。
【问题讨论】:
标签: java fontmetrics
没有简单的方法。
首先,您知道 java 只提供了五个逻辑字体系列。不保证所有其他字体都存在于您将运行该程序的系统中。
那么,不,您的系统上没有字体属性的自动映射。您必须将它们全部加载并循环搜索所需的度量。
使用this code,您可以循环使用可用的字体:
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.html中的They 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(显示为 here 和 here)将为给定文本提供最严格的界限。
【讨论】:
FontMetrics metric = new FontMetrics(new Font("font"), Font.BOLD, 12);
metrics.getHeight()
可能就是你要找的。p>
更多信息:http://download.oracle.com/javase/6/docs/api/java/awt/FontMetrics.html
【讨论】: