样式表

一、样式表是什么

在 JavaFX 中,样式表 (style sheet) 是一种定义控件样式的外部文件,它使用 CSS 语法来描述控件的外观和行为。样式表可以定义多个样式类和内联样式,可以通过控件的 setStyleSheet() 方法来应用到控件中。

样式表的语法与传统的 CSS 语法大体相同,但有一些 JavaFX 特有的扩展和修改,例如:

  1. 使用 -fx- 前缀来定义 JavaFX 特有的样式属性。
  2. 支持一些额外的 CSS 选择器,例如 :selected 和 :armed。
  3. 可以使用 | 符号来表示命名空间。

样式表通常以 .css 为扩展名,可以通过 JavaFX 应用程序的 Scene 类的 getStylesheets() 方法来加载样式表:

Scene scene = new Scene(new Group(), 400, 300);

scene.getStylesheets().add("styles.css");

在这个例子中,我们通过 getStylesheets() 方法加载了一个名为 styles.css 的样式表。

样式表是 JavaFX 中定义控件样式的主要方式之一,它的优点包括:

  1. 可以将样式定义集中管理,方便修改和维护。
  2. 可以分别为不同的控件定义不同的样式类,实现细粒度的样式控制。
  3. 可以通过引入外部的样式表来实现样式复用和扩展。

需要注意的是,样式表定义的样式优先级高于内联样式和默认样式,因此在使用样式表时需要注意样式的继承和覆盖关系,以避免意外的行为。

二、样式表作用域

JavaFX 样式表的作用域主要分为 Scene 和全局两种:

Scene 作用域:指的是样式表只作用于当前 Scene 中的节点。在使用样式表时,可以通过 scene.getStylesheets().add("styles.css") 方法将样式表文件添加到对应的 Scene 对象中。这样,样式表就只会作用于该 Scene 对象中的节点,而不会影响到其他 Scene 中的节点。

全局作用域:指的是样式表作用于整个应用程序中的所有节点。在使用样式表时,可以通过 Application.setUserAgentStylesheet() 或 System.setProperty("javafx.userAgentStylesheetUrl", "styles.css") 方法将样式表文件设置为全局样式表。这样,样式表就会作用于整个应用程序中的所有节点。

需要注意的是,样式表的作用域存在优先级关系。在一个节点被添加到 Scene 中后,会先应用 Scene 作用域的样式表,然后再应用全局作用域的样式表。如果存在相同的样式定义,后加载的样式表会覆盖先加载的样式表。此外,节点自身的样式定义会覆盖作用于它的样式表中的样式定义。因此,在使用样式表时,需要注意样式定义的优先级关系,以确保样式表可以正确应用。