これは仕様によるものです。アーキテクチャ上の理由から、cssのオーバーライドのチェーンは次のように機能します。
デフォルトのcaspian.css<API設定<ユーザーのScene
css<ユーザーのParent
css<setStyle()
これがcssリファレンスガイドからの引用です:
JavaFX CSS実装は、次の優先順位を適用します。ユーザーエージェントスタイルシートのスタイルは、シーンまたは親スタイルシートよりも優先度が低いコードから設定された値よりも優先度が低くなります。インラインスタイルが最も優先されます。親インスタンスのスタイルシートは、シーンスタイルシートのスタイルシートよりも具体的であると見なされます。
setStyle()
したがって、 API呼び出しの代わりにを使用して、目標を達成できます。次の例を実行してみてください。
public void start(Stage stage) {
VBox root = new VBox(10);
Scene scene = new Scene(root, 300, 250);
// font.css: .labelStyleClass { -fx-font-size: 20 }
scene.getStylesheets().add(getClass().getResource("font.css").toExternalForm());
root.getChildren().add(LabelBuilder.create().text("default").build());
root.getChildren().add(LabelBuilder.create().text("font-css").styleClass("labelStyleClass").build());
Label lblApi = LabelBuilder.create().text("font-css-api (doesn't work)").styleClass("labelStyleClass").build();
lblApi.setFont(Font.font(lblApi.getFont().getFamily(), 40));
root.getChildren().add(lblApi);
Label lblStyle = LabelBuilder.create().text("font-css-setstyle (work)").styleClass("labelStyleClass").build();
lblStyle.setStyle("-fx-font-size:40;");
root.getChildren().add(lblStyle);
stage.setTitle("Hello World!");
stage.setScene(scene);
stage.show();
}