我想要在我的JavaFX应用程序中动态更改(已加载的)文本字体,所以我编写了以下代码:
Font font = Font.loadFont(Fonts.class.getClassLoader().getResource("path/font.woff").toExternalForm(), 25);
Font bold = Font.font(font.getFamily(), FontWeight.BOLD, font.getSize());
Font italic = Font.font(font.getFamily(), FontPosture.ITALIC, font.getSize());
Font boldItalic = Font.font(font.getFamily(), FontWeight.BOLD, FontPosture.ITALIC, font.getSize());
但是当我尝试将文本字体改为粗体或斜体时,没有任何变化,并且我似乎找不到类似于java.awt.Font#deriveFont的方法,可以从另一个字体派生出斜体或粗体。
应用字体的代码:
public void applyFont(javafx.scene.text.Text text) {
text.setFont(font);
}
编辑:更多日志:
我添加了一些日志,显示他正在获取哪种字体,并打印Font#toString()结果:
getFont(bold=false, italic=false) -> Font[name=<Name> Regular, family=<Name>, style=Regular, size=25.0]
getFont(bold=true, italic=false) -> Font[name=<Name> Regular, family=<Name>, style=Regular, size=25.0]
getFont(bold=false, italic=true) -> Font[name=<Name> Regular, family=<Name>, style=Regular, size=25.0]
getFont(bold=true, italic=true) -> Font[name=<Name> Regular, family=<Name>, style=Regular, size=25.0]
但是如果我用以下代码替换字体加载的第一行:
font = Font.font(null, 25);//get the system's default font
它起作用了,我得到了这个输出:
getFont(bold=false, italic=false) -> Font[name=System Regular, family=System, style=Regular, size=25.0]
getFont(bold=true, italic=false) -> Font[name=System Bold, family=System, style=Bold, size=25.0]
getFont(bold=false, italic=true) -> Font[name=System Italic, family=System, style=Italic, size=25.0]
getFont(bold=true, italic=true) -> Font[name=System Bold Italic, family=System, style=Bold Italic, size=25.0]