如何在javafx中自动选择能够显示所提供文本的字体?

如何在javafx中自动选择能够显示所提供文本的字体?,java,javafx,fonts,Java,Javafx,Fonts,我正在开发一个JavaFX应用程序。它的一部分是一个虚拟键盘,需要能够显示默认字体中可能不存在的字符。我需要能够检测JavaFX字体何时不支持字符 我最初的想法是使用java.awt.Font#canDisplayUpTo方法,并使用GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts()搜索所有可用的字体,然后通过这种方式获得字体名称来创建JavaFXJavaFX.scene.text.Font 事实证明,java.awt.

我正在开发一个JavaFX应用程序。它的一部分是一个虚拟键盘,需要能够显示默认字体中可能不存在的字符。我需要能够检测JavaFX字体何时不支持字符

我最初的想法是使用
java.awt.Font#canDisplayUpTo
方法,并使用
GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts()
搜索所有可用的字体,然后通过这种方式获得字体名称来创建JavaFX
JavaFX.scene.text.Font

事实证明,
java.awt.Font#canDisplayUpTo
返回-1(表示支持所有字符),即使派生的JavaFX字体不支持提供的字符串。我认为这是因为当使用默认字体时,
java.awt.Font
实际上是由复合字体备份的,至少我在调试代码时看到了这一点

private静态字体defaultFont=Font.getDefault();
公共字符串getFontName(字符串文本){
//试试默认字体
java.awt.Font defaultFontAwt=new java.awt.Font(defaultFont.getName(),java.awt.Font.PLAIN,16);//defaultFont.getFamily()产生相同的结果
如果(defaultFontAwt.canDisplayUpTo(文本)=-1){
//情况总是这样:(
返回defaultFont.getName();
}
//搜索所有可用字体
GraphicsEnvironment e=GraphicsEnvironment.getLocalGraphicsEnvironment();
java.awt.Font[]Font=e.getAllFonts();
for(java.awt.Font字体:字体){
如果(字体canDisplayUpTo(文本)=-1){
返回font.getName();
}
}
//找不到能够显示文本的字体
返回defaultFont.getName();
}
我的方法似乎有问题,因为
defaultFontAwt
是一种复合字体,包含的内容比
defaultFont
多。在我看来,我不能简单地从
javafx.scene.text.font
创建
java.awt.font
,反之亦然

是否有其他方法可以使用
javafx.scene.text.Font
(最好不使用AWT)检测不支持的字符?如果没有,是否可以不使用默认的javafx字体创建组合
java.AWT.Font

我在arch linux上运行应用程序并使用单间距字体显示死掉的字符(如死掉的caron(̌))时遇到了这个问题

非常感谢您的阅读和帮助