使用带有Font.createFont的truetype字体文件时,文本指标错误

时间:2012-10-17 10:06:04

标签: java fonts pack true-type-fonts

我从fontpalace.com下载了Helvetica字体(只搜索Helvetica),并使用Font.createFont()将其包含在Java应用程序中。但字体指标不适用于此,即计算出的标签最小尺寸是错误的。

显示此问题的简单示例应用程序:

package fontTest;
import java.awt.Font;
import java.io.InputStream;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class FontTest extends JFrame {
    public FontTest() {
        JLabel label = new JLabel("Test");
        try {
            InputStream is = FontTest.class.getResourceAsStream("Helvetica.ttf");
            Font font = Font.createFont(Font.TRUETYPE_FONT, is);
            label.setFont(font.deriveFont(12f));
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        add(label);
        pack();
    }

    public static void main(String[] args) {
        FontTest fontTest = new FontTest();
        fontTest.setVisible(true);
    }
}

如果删除带有label.setFont(..)的行,则pack()命令有效,窗口会调整大小以使文本可读。然而,有了这个,pack()无法正常工作,导致标签,从而将窗口调整到非常小的尺寸,从而切断文本。我在Linux和Windows上遇到了这个问题。

我错过了什么吗?看起来有些ttf字体文件有效,有些则无效。但我找不到能正常工作的Helvetica(原始的,不是Neue Helvetica或其他)。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

font.deriveFont采用float而不是int。 试试label.setFont(font.deriveFont(12f));