Javafx字体派生粗体。

4

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

你的代码应用字体似乎总是使用从资源加载的字体。你为什么期望它会有所不同呢? - fabian
那段代码只是为了展示我如何应用它,在实际应用中是这样的:"text.setFont(Fonts.getFont(bold, italic));" 其中,Fonts.getFont(bool bld, bool itlc) 是这样的:"return bld ? (itlc ? boldItalic : bold) : itlc ? italic : font;" - SnowyCoder
1个回答

0

你需要加载另一个字体文件,提供适当的姿态或重量。

对于每种流行的字体(包括系统字体,在调用Font.font(null, 25)时使用),系统中都有几个字体文件:常规、斜体、粗体等。

例如,对于Times New Roman,在我的Fonts文件夹中有四个文件:

  • Times New Roman Bold Italic.ttf
  • Times New Roman Bold.ttf
  • Times New Roman Italic.ttf
  • Times New Roman.ttf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接