JavaFX CSS

由 haiguiking 创建,小路依依 最后一次修改 2017-01-09

JavaFX教程 - JavaFX CSS


JavaFX应用程序支持主题通过CSS设置。

主题可以转换整个应用程序的外观,而不改变其功能。

在JavaFX中,您可以创建,修改或使用现有主题来应用程序。

应用主题

setUserAgentStylesheet(String URL)方法接受表示JavaFX CSS文件的有效URL字符串。

CSS文件捆绑在jar应用程序内,或者它们可以驻留在本地文件系统或远程Web服务器上。

要从类路径加载CSS文件,请调用getClass()。getResource(“path / some_file.css”)。toExternalForm()方法。它会找到CSS文件并产生一个URL String。

下面的代码加载sample.css文件作为当前的外观。

sample.css文件和Java类位于同一目录中,因此文件名前面不需要有路径。

Application.setUserAgentStylesheet(getClass().getResource("sample.css")
.toExternalForm());

完整的源代码。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {
  public static void main(String[] args) {
    Application.launch(args);
    
  }

  @Override
  public void start(Stage primaryStage) {
    Application.setUserAgentStylesheet(getClass().getResource("sample.css")
        .toExternalForm());
    
    
    Group root = new Group();
    Scene scene = new Scene(root, 300, 250);

    primaryStage.setScene(scene);
    primaryStage.show();
  }
}

setUserAgentStylesheet()方法将样式全局应用于应用程序拥有的所有场景。


预定义皮肤

JavaFX 8目前包含两个样式表,Caspian和Modena,它们用作默认的跨平台外观和感觉皮肤。

因为两个样式表是预定义的,您可以使用setUserAgentStylesheet()方法在它们之间轻松切换。

以下代码显示如何在Caspian和Modena外观样式表之间切换。

// Switch  to JavaFX 2.x"s CASPIAN  Look and  Feel. Application.setUserAgentStylesheet(STYLESHEET_CASPIAN);

// Switch  to JavaFX 8"s Modena Look and  Feel. 
Application.setUserAgentStylesheet(STYLESHEET_MODENA);

我们可以从jfxrt.jar文件中提取CSS文件caspian.css和modena.css,或者查看位于http://openjdk.java.net的JavaFX源代码。

当调用setUserAgentStylesheet(null)时,默认样式表(Modena)将被自动加载并设置为当前外观。

对于JavaFX 2.x,默认样式表将是Caspian。


场景主题

通过调用scene.getStylesheets().add()方法,我们可以为单个场景及其子节点设置样式。

我们将传递一个表示JavaFX CSS文件的URL字符串。

以下代码调用setUserAgentStylesheet(null)加载Modena作为外观,然后通过调用getStylesheets()。add()方法设置场景的其他样式。

Application.setUserAgentStylesheet(null); // defaults to Modena

// apply   custom  look  and  feel to the   scene. 
scene.getStylesheets()
.add(getClass().getResource("my_cool_skin.css")
.toExternalForm());

CSS样式

类似于HTML5使用CSS样式表的方式,在场景图上有与N​​ode对象相关联的选择器或样式类。

所有JavaFX场景图形节点分别有setId(),getStyleClass()。add()和setStyle()方法来应用可以改变节点的背景颜色,边框,笔画等的样式。

选择器在场景图上定位JavaFX节点,然后我们可以使用CSS样式定义对它们进行样式化。

两种类型的选择器类型是 id class

id选择器是在场景节点上设置的唯一字符串名称。

类选择器是一个字符串名称,可以作为标记添加到任何JavaFX节点。

类选择器与Java类的概念无关。类选择器用于对节点进行分组以将它们与一个CSS样式定义一起设置样式。

ID选择器

id选择器是赋值给节点的唯一字符串名称。当使用id选择器时,我们将调用JavaFX节点对象上的setId(String ID)方法来设置其id。

例如,要定位id为my-button的Button实例,您将调用setId(“my-button”)方法。

要为按钮设置id为my-button的样式,您将创建一个用id声明的CSS样式定义块selector#my-button,如下所示:

#my-button {
    -fx-text-fill: rgba(17, 145,  213);
    -fx-border-color:  rgba(255, 255,  255,  .80);
    -fx-border-radius: 8;
    -fx-padding: 6  6  6  6;
}

此CSS样式块将应用于具有 my-button 的唯一标识的按钮。

CSS选择器名称前面带有#符号,而Java代码中的id不使用#符号。

类选择器

当使用类类型选择器时,我们将调用getStyleClass()。add(String styleClass)方法向节点添加一个选择器。该方法允许我们有多个样式类来对节点进行样式。

getStyleClass()方法返回一个ObservableList,我们可以添加和删除样式类来动态更新它的外观。

以下代码通过getStyleClass().add("num-button")方法定位样式类包含num-button的按钮。

以下是用类选择器声明的CSS样式定义块 .num-button :

.num-button  {
    -fx-background-color: white, rgb(189,218,230), white;
    -fx-background-radius: 50%;
    -fx-background-insets: 0, 1, 2;
    -fx-font-family:  "Helvetica";
    -fx-text-fill:  black;
    -fx-font-size:  20px;
}

此CSS样式块将应用于具有样式类 num-button 的按钮。

CSS选择器名称以.号为前缀,而Java代码中的选择器不使用。符号。

选择器模式

选择器可以有模式来遍历场景图的节点从根节点到子节点的层次结构。

我们可以对父节点是某种类型的子节点进行样式化。以下代码显示了如何设置所有按钮的样式,其父对象是HBox。

.hbox  > .button {  -fx-text-fill: black;  }

选择器模式 .hbox>.button styles作为HBox的后代的Button节点。两个选择器之间的大于符号允许系统知道要对哪些节点进行样式。

JavaFX节点的选择器都是小写字母,如果控件具有多个字,则它们用连字符分隔。例如,GridPane的类选择器将是 .grid-pane

我们还可以使用公共属性来为两种不同类型的节点设置样式。以下代码显示如何为所有标签和文本节点设置样式。

.label,.text {  -fx-font-size: 20px;  }
以上内容是否对您有帮助:

二维码
建议反馈
二维码