4

有没有一种(简洁的)方法,而不是获取特定字体大小的高度,而是获取产​​生给定高度的特定字体(在这种情况下为 SansSerif)的字体大小?

我当然可以循环使用字体大小或使用某种形式的二进制印章,但如果可能的话,我想使用一些更干净、资源更少的东西。我发现最好的方法是使用这样的东西

4

3 回答 3

3

没有简单的方法。

首先,您知道 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)

于 2011-08-25T14:36:28.560 回答
2

搜索时TextLayout,显示在此处此处,将为给定文本提供最严格的界限。

于 2011-08-25T15:59:19.347 回答
2
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

于 2011-08-25T14:22:59.510 回答