使用JavaFX FXML在CSS中设置样式布局窗格而不创建变量?

时间:2016-07-03 06:58:51

标签: java css javafx fxml scenebuilder

我正在使用JavaFX FXML,我在用CSS设计应用程序时遇到了一些麻烦。

我的根节点上有GridPane,我想设置它的背景。 GridPane本身从未在Java代码(@FXML)中提及,因为它没有 - 它从未在代码中使用过。

然而,我现在正在设计应用程序,我可以从Oracle's Official Guide of Styling Layout Panes with CSS得到的是我必须创建一个这样的变量:GridPane grid = new GridPane();然后继续为变量分配一个样式,像这样:

.grid {
    -fx-background-color: white;
    -fx-background-radius: 5.0;
    -fx-background-insets: 0.0 5.0 0.0 5.0;
    -fx-padding: 10;
    -fx-hgap: 10;
    -fx-vgap: 10;
}

然后继续添加样式,如下所示:grid.getStyleClass().add("grid");

这对我来说是一个不可行的解决方案,因为我在整个项目的多个场景中有多个GridPane,我不必手动为所有这些场景创建变量。

是否有类似于造型按钮的解决方案?

按钮可以设置样式而无需为其创建变量,它会自动设置场景中所有按钮的样式,如下所示:

.button{
    -fx-text-fill: rgb(49, 89, 23);
    -fx-border-color: rgb(49, 89, 23);
    -fx-border-radius: 5;
    -fx-padding: 3 6 6 6;
}

1 个答案:

答案 0 :(得分:2)

Main Class:没有自己的样式类(请参阅CSS reference),但与HTML中的标记选择器类似,GridPane可以通过其java类选择:< / p>

Node

此外,可以从FXML添加样式类,因为styleClassRead-Only List Property

单个样式类的简短形式:

GridPane {
    -fx-background-color: white;
    -fx-background-radius: 5.0;
    -fx-background-insets: 0.0 5.0 0.0 5.0;
    -fx-padding: 10;
    -fx-hgap: 10;
    -fx-vgap: 10;
}

多个样式类的长格式:

<GridPane styleClass="grid">
     ...

也可以从SceneBuilder的属性视图中添加样式类。