web-dev-qa-db-ja.com

JavaFXでフォントをグローバルに設定する

JavaFXアプリケーションでフォントタイプをグローバルに設定するにはどうすればよいですか?

使用できる解決策はありますか? JavaFX 8では、デフォルトのフォントが変更されました。JavaFX2.2で使用されているのと同じフォントを使用したいと思います。

13
Peter Penzov

説明されているように、CSSを使用してアプリケーションをスキンできます Oracle Webサイト上 。次の構文を使用して、アプリケーションの一般的なテーマを設定できます。

.root{
    -fx-font-size: 16pt;
    -fx-font-family: "Courier New";
    -fx-base: rgb(132, 145, 47);
    -fx-background: rgb(225, 228, 203);
}

次のようにcssを含めます。

scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
25
nyyrikki

シーンのデフォルトフォントの変更

これは、nyyrikkiの回答にリンクされているソリューションです。

次のCSSスタイルシートをシーンに適用することで、特定のシーンのほとんどのものに使用されるデフォルトのフォントを変更できます。

.root {
  -fx-font: 28px Vivaldi;
}

JavaFX CSSリファレンスガイドのフォント定義 に従って、-fx-font値に必要な設定を置き換えます。

アプリケーションのデフォルトフォントの変更

JavaFXアプリケーションでほとんどの場合に使用されるデフォルトのフォントを変更する場合は、 Application.setUserAgentStylesheet を使用してデフォルトのスタイルシートをオーバーライドできます。このメソッドを使用すると、JavaFX 8アプリケーションのデフォルトスタイルを、JavaFX 8のデフォルトである modena スタイルシートではなく、JavaFX 2.2のデフォルトである caspian スタイルシートに設定できます。 2つのデフォルトスタイルのハイブリッドまたは AquaFX などのカスタムデフォルトスタイルシートが必要な場合は、自分でカスタマイズを実行する必要があります。

フォントレンダリングテクノロジーの切り替え

さらに、一部のプラットフォームでは、JavaFX2.2はJavaFX8とは異なるフォントレンダリングメカニズムを使用します。これにより、2つの間のフォントレンダリングの微妙な違いを説明できます。 JavaFX 8のフォントレンダリングメカニズムを切り替えるために使用できる、文書化されていないサポートされていないコマンドラインスイッチがありますが、スイッチが手元にあるのかわかりません。たとえそうしたとしても、展開することはお勧めしません。サポートされていないため、スイッチを使用するアプリケーション。

7
jewelsea

TornadoFXの例

package bj

import tornadofx.*

class MyView : View() {
    override val root = vbox {
        button("天地玄黄")
        button("宇宙洪荒")
    }
}

class MyStylesheet : Stylesheet() {
    init {
        root {
            fontFamily = "Noto Sans CJK SC Regular"
        }
    }
}

class MyApp : App(MyView::class, MyStylesheet::class)

fun main(args: Array<String>) {
    launch<MyApp>(*args)
}
2
BaiJiFeiLong