私は、テキストのラベルを含む短いjavafxプログラムと、ラベルのフォントをイタリックに変更するボタンを作成しています。私が使用するフォントはカスタムフォントであるため、javafxはカスタムフォントをイタリックまたは太字に変換できないため、new Font("human.ttf", FontPosture.ITALIC, 20)
を直接呼び出すことはできません。setFont()メソッドが期待どおりのラベルで動作していないjavafx
私は同じフォントファミリの2つの異なるフォントファイルを持っていて、普通のスタイルのフォントファイルと斜体スタイルのフォントファイルを持つことにしました。したがって、イタリックボタンがクリックされると、プログラムはイタリックフォントファイルをロードし、ラベルのフォントをイタリックフォントに設定する。
しかし、私がプログラムを試したときに、イタリック体のボタンをクリックしても、ラベルのフォントは影響を受けません。私は問題の原因を見つけようと努力し、いくつかの印刷ステートメントを追加しました。私が問題を発見したプロセスの中で、ボタンのeventHandlerのsetFontメソッドが正しく動作していないことがわかりました。 printステートメントのせいで、フォントファイルのパスが正しいこともわかりました。したがって、私はコード内の私の間違いを把握することができません。
これは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);
}
}
明確化のいずれかの種類が必要な場合を教えてください。前もって感謝します。
興味深い:それはバグのようです。 'Label.setFont'は' fontProperty()。set(...) 'メソッドに委譲します。与えられたフォントが( '.equals(...)'の意味で)現在のフォントと等しい場合、このメソッドはノーオペレーションになります。 'Font'は、フォントの名前とサイズを比較するために' .equals(...) 'を定義します。したがって、カスタムフォントに割り当てられた名前が同じであれば、これが失敗する理由だと思います。 'firstCustomFont.getName()'と 'secondCustomFont.getName()'は何を返しますか? –
そうです、あなたは正しいです。彼らは同じ値を返します。これは私が使用するフォントファイルが同じフォントファイルの編集版であるためです。これは私が考慮しなかったと思う領域です。ご意見ありがとうございます。 –
ファイル名に何らかのバージョン管理を追加することができれば.... –