我想为我的 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]