【问题标题】:Style Layout Panes in CSS with JavaFX FXML without creating a variable?使用 JavaFX FXML 在 CSS 中样式布局窗格而不创建变量?
【发布时间】:2016-11-05 04:04:08
【问题描述】:

我正在使用 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");

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

是否有类似于设置按钮样式的解决方案?

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

.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;
}

【问题讨论】:

  • 来自GridPane-Doc:GridPane 可以使用 CSS 设置背景和边框样式。有关详细信息,请参阅Region 超类。区域的 CSS 是 here。但是改变地区并不是一个好建议。所以你的解决方案相当不错,可能需要循环添加类。
  • GridPane 默认没有样式类,所以需要手动添加样式类
  • @Kachna 如何做到这一点?

标签: java css javafx fxml scenebuilder


【解决方案1】:

GridPane 没有自己的样式类(参见CSS reference),但与 HTML 中的标签选择器类似,Nodes 可以通过其 java 类进行选择:

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;
}

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

单个样式类的简写形式:

<GridPane styleClass="grid">
     ...

多个样式类的长格式:

<GridPane>
     <styleClass>
          <String fx:value="grid"/>
          <String fx:value="myclass"/>
     </styleClass>
     ...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 2023-04-03
    • 2021-05-03
    相关资源
    最近更新 更多