JavaFX GridPane,VBox,HBox是否有预定义的CSS类? 我在CSS reference中找不到任何内容,但看起来很奇怪默认组件没有定义。
如果没有预先定义的类,有没有比在所有网格上手动添加类更好的方法:
GridPane pane = new GridPane();
pane.getStyleClass().add("grid-pane");
答案 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;
}
将“蓝色主题”应用于整个应用程序,将默认为“继承”的查找颜色和属性传播到所有子节点。