当前位置: 首页 > 知识库问答 >
问题:

系统字体,默认内置字体用于不支持的字符

邓正真
2023-03-14

我在Windows上使用segoe ui系统字体作为jlabelSegoe UI不支持CJK字符,但不是默认为这些字符(例如Font.Dialog/code>),而是只显示占位符。

我想在Windows上使用segoe ui,因为它看起来更适合拉丁字符,但我不想完全失去对显示中日韩字符的支持。

有办法组合字体吗?对于拉丁字符,首选segoe ui,但默认值为font.dialog(或任何其他系统默认值),以至少呈现可读字符。

例如。

Font font = new Font("Segoe UI", Font.PLAIN, 12);
label.setFont(font);


共有1个答案

孙清野
2023-03-14

最简单的解决方案是使用StyleContext#GetFont,它将调用内部apiFontUtilities#GetCompositeFontUiResource(Font)。此函数将创建一个复合字体,该字体将为不支持的字符使用后备字体。

请注意,您无法控制将使用哪种字体作为后退。

因为返回的字体是UIResource,所以我们需要对其进行包装,以避免它被lookandfeel覆盖。自定义nonuiResourceFont类是必需的,因为接受另一个FontFont的构造函数是受保护的。

public static Font createFont(final String family, final int style, final int size) {
    return new NonUIResourceFont(StyleContext.getDefaultStyleContext().getFont(family, style, size));
}

public static class NonUIResourceFont extends Font {

    public NonUIResourceFont(final Font font) {
        super(font);
    }
}
 类似资料:
  • 有了Android(三星、LG、HTC)的一些风格,似乎可以设置默认系统字体而无需根。我没有这些设备可以测试(我有一台旧的联想平板电脑),但我想知道以下几点: 字体。默认方法返回这些设备上自定义字体的字体,或者总是返回Roboto上的信息? 如果它返回关于自定义字体的信息,我如何以编程方式获得自定义字体的字体名称(字符串)? 如果字体。默认是一个死胡同,还有其他方法来获得默认的系统字体名称吗?也许

  • 从API16开始,Jellybean Roboto作为可用的字体家族被引入。看看Android16的“新”在这里。 在上指定(API 16+中的Roboto)是的默认吗? 是 ? 来自材料设计排版网站: “Roboto和Noto是Android和Chrome上的标准字体。” null

  • 我正在使用iTextSharp创建一个新的pdf文件。pdf将包含一个标题和一个pdf表格。生成的pdf文件的文件大小应该尽可能小,所以我使用默认字体(Helvetica,12pt)。有没有办法将默认字体大小从12pt更改为8pt。 我知道我可以为每个pdf表格单元格设置字体。 但是是否可以为整个文档/表格设置默认字体大小,这样我就不需要为每个表格单元格额外设置字体了? (我在谷歌上搜索了这个话题

  • 问题内容: 我将如何为所有实例设置默认字体。而不是分别为每个字体设置字体。 问题答案: 使用定义JLabel的默认字体: 通过:http : //coding.derkeiler.com/Archive/Java/comp.lang.java.help/2005-04/msg00395.html

  • 我有一个文本视图,我想风格。我知道无衬线字体家族使用机器人字体。 对于,我只得到以下建议: 衬线 serif-monspace 无衬线 无衬线压缩 sans-serif小写 如何使用/system/etc/font.xml中声明的其余别名?

  • 在React Native中是否存在与此CSS等效的字体,以便应用程序在任何地方都使用相同的字体? 在每个Text节点上手动应用它似乎过于复杂。