20

JavaFXアプリケーションでCSSを使用してフォントを指定することはできますか? FXML シーンと対応する CSS ファイルがあります。setFontJava コードでは、次のメソッドを使用してフォントを指定できます。

text.setFont(Font.loadFont("file:resources/fonts/SourceSansPro-Bold.ttf", 12));

次のようなさまざまな構造を試しました。

-fx-font-family: url("../fonts/SourceSansPro-Bold.ttf");

しかし、うまくいきません。

4

6 に答える 6

21

アプリケーションコードとCSSの組み合わせを使用して、外部フォントを介してスタイルを設定します。

loadFontオーバーライドされたApplicationinitメソッド内に呼び出しを配置し​​て、アプリケーションで何かが発生する前に呼び出されるようにします。

Font.loadFont(CustomFontTest.class.getResource("TRON.TTF").toExternalForm(), 10);

フォントを使用するには、CSSのフォントファミリごとにフォントを参照します。

.menu-bar {
    -fx-background-color: transparent;
    -fx-font-family: TRON;
    -fx-font-size: 40px;
}

.context-menu {
    -fx-font-family: TRON;
    -fx-background-color: transparent;
    -fx-font-size: 12px;
}

CSSがフォントのサイズを適切に設定しているのは素晴らしいことです。フォントがサイズ10でロードされている場合でも、フォントはCSS-fx-font-size仕様で指定されているサイズに正しくサイズ変更されました。

アプリケーションの初期化中にロードされたものを使用したCSSによるラベルのインラインスタイリングFontも正常に機能します。

Label testControl = new Label("TRON");
testControl.setStyle("-fx-font-family: TRON; -fx-font-size: 120;");

TRONフォントはdafontからダウンロードされ、CustomFontTestクラスと同じディレクトリに配置され、ビルドシステムによってビルド出力ディレクトリにコピーされました。

「カスタムフォントの使用」に関するフォーラム投稿への私の回答からコピーされた回答。

于 2012-08-29T15:56:59.087 に答える
17

あなたは解決策に近かった:

-fx-font-family: 'Helvetica', Arial, sans-serif;

これを試してみてください。うまくいくはずです。


多分これは助けになるでしょうか?(私はJavaFXの専門家ではありません)

https://forums.oracle.com/forums/thread.jspa?messageID=10107625


編集

フォントをロードします。

@font-face {
    font-family: Delicious;
    src: url('Delicious-Roman.otf');
}

フォントを次のように使用します-fx-

-fx-font-family: 'Delicious';
于 2012-08-29T08:09:03.083 に答える
1

もう 1 つの方法は、FileIUnputStream を使用してフォントをロードすることです。したがって、css を使用する必要はありません。

 @FXML
    private Label myLabel;

@Override
    public void initialize(URL arg0, ResourceBundle arg1){

Font myFont = null;

        try {
            myFont = Font.loadFont(new FileInputStream(new File("patch_to_font.ttf")), 10);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        myLabel.setFont(myFont);

}
于 2016-02-11T09:41:27.147 に答える