【问题标题】:Multiple unicode fonts in Java Applet GUI ComponentsJava Applet GUI 组件中的多种 unicode 字体
【发布时间】:2013-05-22 11:22:02
【问题描述】:

我有一个带有 JLabel、JTextField 和其他 Java Swing 组件的小程序。另一方面,我有 .ttf 文件的 unicode 字体“AR”、“AR-ExtB”(扩展 B 区域)和“AR-Plus”(补充私人使用区域-A)。我希望小程序在每个 GUI 组件上使用三个 .ttf 文件,具体取决于用户输入的代码点。

1) 我知道这些组件无法使用多种字体。因此,将字体设置为组件的显式方法不是一种选择。

2) 嗯,有一种方法可以通过修改 $JAVA_HOME/lib 目录中的 fontconfig.properties 文件来实现,例如,“Dialog”(逻辑)字体已将三个 .ttf 文件映射为一个逻辑字体,但问题是所有其他 java 应用程序也会有这些字体,这不是我们想要的场景。

3) “Fallback fonts”,当没有其他字体可以在屏幕上显示字形时使用。这也不是一个解决方案,因为它只会显示 JAVA 默认字体未覆盖的字符。

问题是:

有谁知道如何在每个 GUI Swing 组件中使用这些 .ttf 文件作为字体,但仅限于 Applet 中,而不是全局用于在 JVM 上运行的所有应用程序?

【问题讨论】:

  • 关于第 2 点 - 您是否有任何链接可以支持这就是 java 逻辑字体的工作方式?我的理解是,“逻辑”字体的 Java 概念只是意味着 JDK 会保证,如果您使用像“Dialog”这样的逻辑字体名称,则可以确保肯定会加载某些物理字体(从而避免了担心在任何给定平台上加载什么字体)。
  • 哎呀,没关系 - 我现在在字体配置文档中看到它应该如何工作(我认为 fontconfig.properties 的东西是用于 HtmlView)。

标签: java swing unicode fonts truetype


【解决方案1】:

要将 TTF 文件用作字体,您需要加载它并创建一个像这样设置的 Font 对象。

    try {
     GraphicsEnvironment ge = 
         GraphicsEnvironment.getLocalGraphicsEnvironment();
     ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File("A.ttf")));
} catch (IOException|FontFormatException e) {
     //Handle exception
}

在此之后可以使用字体对象。

使用逻辑字体检查Oracle docs

-- 苏曼

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-07
    • 2010-10-02
    • 1970-01-01
    • 2010-09-13
    • 2012-01-30
    • 2012-04-28
    • 1970-01-01
    • 2016-05-15
    相关资源
    最近更新 更多