我正在开发一个 JavaFX 应用程序。其中一部分是虚拟键盘,需要能够显示默认字体中可能不存在的字符。我需要能够检测JavaFX 字体何时不支持字符。
\n\n我最初的想法是使用java.awt.Font#canDisplayUpTo方法并使用以下方式搜索所有可用字体GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts(),并通过这种方式获取字体名称来创建 JavaFX javafx.scene.text.Font。
事实证明,java.awt.Font#canDisplayUpTo即使派生的 JavaFX 字体不支持提供的 String,也会返回 -1(意味着支持所有字符)。java.awt.Font我认为这是由于使用默认字体时实际上由复合字体支持的事实造成的- 至少这是我在调试代码时看到的。
private static Font defaultFont = Font.getDefault();\npublic String getFontName(String text) {\n //try default font\n java.awt.Font defaultFontAwt = new java.awt.Font(defaultFont.getName(), java.awt.Font.PLAIN, 16); //defaultFont.getFamily() produces the same result\n if (defaultFontAwt.canDisplayUpTo(text) == -1) {\n //this is always the case :(\n return defaultFont.getName();\n }\n //search through all available fonts\n GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();\n java.awt.Font[] fonts …Run Code Online (Sandbox Code Playgroud)