Java小程序GUI组件中的多个unicode字体

Java小程序GUI组件中的多个unicode字体,java,swing,unicode,fonts,truetype,Java,Swing,Unicode,Fonts,Truetype,我有一个带有JLabel、JTextField和其他JavaSwing组件的小程序。另一方面,我有unicode字体“AR”、“AR ExtB”(扩展B区域)和“AR Plus”(补充专用区域-A),它们是.ttf文件。我希望小程序在每个GUI组件上使用三个.ttf文件,具体取决于用户输入的代码点 1) 我知道这些组件无法使用多种字体。因此,为组件设置字体的显式方式不是选项 2) 有一种方法可以通过修改$JAVA_HOME/lib目录中的fontconfig.properties文件来实现这一点

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

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

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

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

问题是:


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

要将ttf文件用作字体,需要加载它并创建一个字体对象,按如下方式设置

    try {
     GraphicsEnvironment ge = 
         GraphicsEnvironment.getLocalGraphicsEnvironment();
     ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File("A.ttf")));
} catch (IOException|FontFormatException e) {
     //Handle exception
}
在此之后,可以使用字体对象

使用逻辑字体检查

--
Suman

关于第2点-您是否有任何链接支持java逻辑字体就是这样工作的?我的理解是,“逻辑”字体的java概念只是意味着JDK将保证,如果您使用“Dialog”这样的逻辑字体名称,您肯定会加载一些物理字体(从而避免了在任何给定平台上加载什么字体的问题),没关系——我现在在font config doco中看到了它应该是如何工作的(我以为fontconfig.properties是为HtmlView准备的)。