JavaFX CSS 是一种用于定义 JavaFX 应用程序外观的样式表语言。它使用 CSS 语法,但有一些特殊的属性和值,只能在 JavaFX 中使用。JavaFX CSS 允许开发人员使用样式表来控制应用程序的外观,而不必在代码中更改任何内容。
JavaFX CSS 样式表可以包含以下内容:
JavaFX CSS 样式表可以包含以下几个部分:
.button { -fx-background-color: #0099FF; -fx-text-fill: white; -fx-font-size: 14px; }
上面这条CSS代码会针对所有button对象进行背景颜色、文字颜色、字体大小三方面的修饰。
JavaFX CSS 是一门功能强大而易于使用的语言,可以帮助你快速创建出惊人的界面效果。此外,CSS 还使得界面风格修改变得十分容易——无需重新郑重代码即可快速修复界面问题或者进行界面风格修正。因此 JavaFX CSS 地位不断上升并已成为 JavaFX 应电影中不可或者都要使电影工具之一。
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());
类似于 HTML5 使用 CSS 样式表的方式,在场景图上有与 Node 对象相关联的选择器或样式类。
所有 JavaFX 场景图形节点分别有 setId(),getStyleClass()。add() 和 setStyle() 方法来应用可以改变节点的背景颜色,边框,笔画等的样式。
选择器在场景图上定位 JavaFX 节点,然后我们可以使用 CSS 样式定义对它们进行样式化。
两种类型的选择器类型是 id
和 class
。
id 选择器是在场景节点上设置的唯一字符串名称。
类选择器是一个字符串名称,可以作为标记添加到任何 JavaFX 节点。
类选择器与 Java 类的概念无关。类选择器用于对节点进行分组以将它们与一个CSS样式定义一起设置样式。
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; }
Java charAt() 方法JavaString类charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1。语法public char cha...
JavaFX教程 -JavaFX表视图我们可以使用来自 JavaFX API 的 TableView,TableColumn 和 TableCell 类以表格形式表示数据。通过实...
JavaFX教程 -JavaFX 菜单菜单是桌面应用程序选择选项的标准方法。菜单和菜单项可以具有用于选择选项的键组合,称为键盘快捷键。...
Java endsWith() 方法Java String类endsWith() 方法用于测试字符串是否以指定的后缀结束。语法public boolean endsWith(String s...
Java 实例 - 字符串分割 Java 实例以下实例使用了 split(string)方法通过指定分隔符将字符串分割为数组://JavaStringSplitEmp.j...