2016-11-20 95 views
2

我想dinamically改變(加載)文本字體爲我的JavaFX應用程序,所以我做了這個代碼: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); 
} 

編輯:更多日誌:
我把一些日誌,說什麼字體被他拿走,並打印字體#的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] 
+0

應用字體的代碼似乎總是使用字體,因爲它是從資源加載的。你爲什麼期望它有所不同? – fabian

+0

該代碼僅用於展示我如何應用它,在實際應用中它是這樣的:「text.setFont(Fonts.getFont(bold,italic));」其中Fonts.getFont(bool bld,bool itlc)是這樣的:「return bld?(itlc?boldItalic:bold):itlc?italic:font;」 – SnowyCoder

回答

0

您需要加載另一個字體文件,它將提供適當的姿勢或重量。

對於每一個流行的字體(包括系統,即用,當你調用Font.font(null, 25))有幾個字體文件系統:一個定期,一個是斜體,一個用於粗體等

例如,爲宋體有四個文件在我的Fonts文件夾:

  • 宋體粗體Italic.ttf
  • 宋體Bold.ttf
  • 宋體Italic.ttf
  • Times New Roman.ttf