■ 关于JavaFX CSS
JavaFX和HTML一样,可以应用CSS样式
语法和用法基本上是一致的
■ CSS的层级分类
按照CSS的作用域,有以下几个层级的CSS样式:
- JavaFX层级的CSS样式
- Scene层级的CSS样式
- 母控件层级的CSS样式
- 控件的style属性
■ JavaFX层级的CSS样式
JavaFX层级的CSS样式是JavaFX默认的CSS样式表,是JavaFX的全局CSS样式,作用于整个JavaFX组件
如果一个组件没有被具体指定CSS样式,则JavaFX层级的CSS样式会作用于该组件
JavaFX层级的CSS样式表也叫Modena,位于JavaFX JAR包里
■ Scene层级的CSS样式
可以为Scene对象设置CSS样式
Scene层级的CSS样式会作用于所有加入到该Scene下的组件
Scene层级的CSS样式表会覆盖JavaFX层级的CSS样式
scene.getStylesheets().add("style1/button-styles.css");
注:
JavaFX在寻找css文件时,是基于classpath找的
即css文件的路径必须要位于于classpath中的某一个路径下
■ 母控件层级的CSS样式
可以为包含了子控件的母控件指定CSS样式,达到对其子控件指定CSS样式的目的,即为所有Parent类的子类控件指定CSS样式
Parent类是所有母控件的基类
母控件层级的CSS样式会覆盖JavaFX层级和Scene层级的CSS样式
比如,layout控件就是Parent类的子类,如果为其指定CSS样式,则该layout控件下的子控件都会被指定CSS样式
Button button1 = new Button("Button 1");
Button button2 = new Button("Button 2");
VBox vbox = new VBox(button1, button2);
vbox.getStylesheets().add("style1/button-styles.css");
■ 控件样式属性
可以为JavaFX某一单独控件指定CSS样式
通过 setStyle() 方法为该组件的 style 属性指定CSS样式
该控件的style属性会覆盖JavaFX层级,Scene层级和母控件层级的CSS样式
Button button = new Button("Button 2");
button.setStyle("-fx-background-color: #0000ff");
String styles =
"-fx-background-color: #0000ff;" +
"-fx-border-color: #ff0000;" ;
Button button = new Button("Button 2");
button.setStyle(styles);
■ JavaFX自有CSS属性
JavaFX有属于自己的CSS属性
这些CSS属性的命名跟html的CSS属性有一些不同,但大体上是相同的
并不是所有的JavaFX自有CSS属性都能够作用于所有JavaFX组件,但大部分都是可以的
比如 -fx-background-color , 表示为一个JavaFX组件设置背景色