GridPane,VBox,VBox的JavaFX CSS类

时间:2014-10-19 23:32:17

标签: javafx-8

JavaFX GridPane,VBox,HBox是否有预定义的CSS类? 我在CSS reference中找不到任何内容,但看起来很奇怪默认组件没有定义。

如果没有预先定义的类,有没有比在所有网格上手动添加类更好的方法:

GridPane pane = new GridPane();
pane.getStyleClass().add("grid-pane");

1 个答案:

答案 0 :(得分:5)

不,只有Control个子类定义了默认的css类。我认为这是因为想要管理自己的图形的应用程序(例如,使用Canvas或非托管的Shapes)可能不会使用css,但可能仍会使用这些布局窗格。由于css应用于场景图的成本很高,因此不一定需要它们的节点没有样式类。

我认为除了显示之外,没有任何方法可以向窗格添加样式类。显然,如果你需要很多具有相同样式类的GridPane,你可以定义一个避免重复代码的方法:

private GridPane createGridPane() {
    GridPane grid = new GridPane();
    grid.getStyleClass().add("grid-pane");
    return grid ;
}

<强>更新

请注意,与基于HTML的CSS一样,您可以使用基于类型的选择器以及基于样式类的选择器,如documentation中所述。任何节点的默认样式类都是其简单的类名。因此,您可以通过类型选择器选择网格窗格:

GridPane {
    /* styles ... */
}

这对我来说有点脆弱:特别是如果你继承GridPane,选择器将不再适用,这从面向对象的角度来看是非常反直觉的。我建议使用样式类而不是类型选择器。

另请注意,如果您想要更改整个应用程序(或只是场景图的子图)的颜色方案(这可能是最常见的用例),您可以简单地为某些应用程序定义值标准的查找颜色。例如:

.root {
    -fx-base: #bfe7ff; 
    -fx-accent: #0096c9 ;
    -fx-default-button: #abd8ed ;
    -fx-focus-color: #039ed3;
    -fx-faint-focus-color: #039ed322;
    -fx-focused-text-base-color : ladder(
            -fx-selection-bar,
            -fx-light-text-color 45%,
            -fx-dark-text-color 46%,
            -fx-dark-text-color 59%,
            -fx-mid-text-color 60%
        );
    -fx-focused-mark-color : -fx-focused-text-base-color ;  

    -fx-font-family: verdana;  
}

将“蓝色主题”应用于整个应用程序,将默认为“继承”的查找颜色和属性传播到所有子节点。