我創建包含與一些文本,這是爲了改變標籤的字體爲斜體的按鈕標籤的短JavaFX的程序。由於我使用的字體是自定義字體,我不能直接調用new Font("human.ttf", FontPosture.ITALIC, 20)
作爲JavaFX的不能轉換自定義字體爲斜體或加粗。setfont程序()方法標籤上工作不正常的JavaFX
所以我決定與同一字體家族兩個不同的字體文件與一個有規則的風格和其他有斜體樣式。因此,當單擊斜體按鈕時,程序將載入斜體字體文件並將標籤的字體設置爲斜體字體。
但是,當我試圖程序,標籤的字體仍然單擊傾斜按鈕後不受影響。我努力尋找問題的根源,並添加了幾個打印語句。在這個過程中,我發現問題是按鈕的eventHandler中的setFont方法無法正常工作。由於打印聲明我還發現字體文件路徑是正確的。因此,我無法弄清楚我的代碼中的錯誤。
這是FontChanger類:
public class FontChanger extends Application{
private Label label;
private Font font;
public void start(Stage primaryStage){
AnchorPane root = new AnchorPane();
root.setPrefHeight(30);
root.setPrefWidth(30);
addLabel(root);
addItalicButton(root);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.sizeToScene();
primaryStage.show();
}
public void addLabel(AnchorPane root){
label = new Label("Sample text");
font = Font.loadFont(FontChanger.this.getClass().getResource("human.ttf").toExternalForm (), 20);
label.setFont(font);
label.setLayoutX(10);
label.setLayoutY(10);
root.getChildren().add(label);
}
public void addItalicButton(AnchorPane root){
Button italicButton = new Button("italic");
italicButton.setLayoutX(10);
italicButton.setLayoutY(35);
italicButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
font = Font.loadFont(FontChanger.this.getClass().getResource("human_italic.ttf").toExternalForm(), 20);
System.out.println(FontChanger.this.getClass().getResource("human_italic.ttf").to ExternalForm());
label.setFont(font);
}
});
root.getChildren().add(italicButton);
}
public static void main(String[] args){
launch(args);
}
}
請告訴我,如果需要任何澄清。提前致謝。
有趣:看起來像一個bug。 'Label.setFont'將委託給'fontProperty()。set(...)'方法。如果提供的字體與當前字體相同(在'.equals(...)')的意義上,則該方法變爲空操作。 'Font'定義'.equals(...)'來比較字體的名稱和大小;所以如果分配給自定義字體的名稱是相同的,那麼我認爲這就是失敗的原因。 'firstCustomFont.getName()'和'secondCustomFont.getName()'返回什麼? –
是的,你說得對。他們返回相同的價值。這是因爲我使用的字體文件是相同字體文件的編輯版本。所以這是我認爲我沒有考慮的領域。謝謝您的意見。 –
所以如果你可以通過某種方式在文件名上添加某種版本控制.... –