Java的内置字体和第三方字体有啥区别?

Posted

技术标签:

【中文标题】Java的内置字体和第三方字体有啥区别?【英文标题】:What is the difference between a built-in font and a third-party font to Java?Java的内置字体和第三方字体有什么区别? 【发布时间】:2012-05-28 09:40:45 【问题描述】:

试图找出此处的 MultiLineLabel 代码中可能存在的错误:http://samuelsjoberg.com/archive/2009/10/multiline-labels-in-swing

从本质上讲,该示例与 Arial 等一起运行得很好。但是如果我在我的 Mac 上安装一个自定义字体,比如 ITCKorinna-Bold,它仍然会呈现 MultiLineLabel,但它不会添加任何换行符,所以 “这是一个 长线。”变成“这是……”

【问题讨论】:

如需尽快获得更好的帮助,请发帖SSCCE。热链接到网络上的字体。 【参考方案1】:

在带有 OpenJDK 7 update 19 的 Linux 上,它工作得很好。你还没有提供你的代码,所以我们很难看出这是否有什么问题。

当我修改示例以使用 Roboto 时,换行符按预期工作。

我不知道您使用的是哪个 Java 运行时,但如果您使用的是 Apple 提供的那个,则 FontMetrics 对象返回的值可能会有所不同(因为 Apple Java 运行时的字体呈现不同,例如Linux 上的 OpenJDK)。我建议尝试 OpenJDK 看看是否会有所不同,或者在不同的平台上运行您的应用程序,看看是否会有所不同。

    Font robotoFont = null;
    try 
        robotoFont = Font.createFont(Font.TRUETYPE_FONT, new File("/usr/share/fonts/roboto/Roboto-Black.ttf"));
        robotoFont = robotoFont.deriveFont(14f);
     catch (Exception e) 
        e.printStackTrace();
    

    // Using the MultiLineLabel class.
    final MultiLineLabel mLabel = new MultiLineLabel(
            "Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
                    + "Phasellus non sapien quam. Fusce posuere, nisl "
                    + "vitae tristique volutpat, augue erat faucibus nisl, "
                    + "nec venenatis metus sem vel enim. Cras in libero "
                    + "sapien, vitae euismod neque. Proin hendrerit, odio "
                    + "et faucibus suscipit, eros tellus blandit justo, "
                    + "ac cursus risus elit ut risus.");
    mLabel.setForeground(Color.WHITE);
    mLabel.setFont(robotoFont);

【讨论】:

以上是关于Java的内置字体和第三方字体有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

使用 em 和百分比的 css 字体大小有啥区别? [复制]

OpenType 字体和 TrueType 字体。有啥不同?

Android 全局使用第三方字体

win10 uwp 打包第三方字体到应用

安卓换字体对速度有影响吗? 因为安卓自带的字体4MB左右,,第三方的大约10MB,,差很多呢,有没

如何在 Mac 下的 LaTeX 中使用中文字体