Java 在FXML中以声明方式设置样式表
在HTML中,我们习惯于以编程方式设置样式表,就像Java 在FXML中以声明方式设置样式表,java,css,javafx-2,Java,Css,Javafx 2,在HTML中,我们习惯于以编程方式设置样式表,就像 <link rel="stylesheet" ... > 是否可以在FXML中设置样式表,类似于在HTML中设置样式表的方式?是,请参见的示例4-8,方法是将以下属性应用于节点: stylesheets="fxmlexample/Login.css" e、 g 您可以使用: 因为FXML中可用的元素和属性是从公共JavaFXJavaAPI派生的,所以您还可以使用FXML样式表元素(或可互换的属性)将样式表分配给父节点。当所有容
<link rel="stylesheet" ... >
是否可以在FXML中设置样式表,类似于在HTML中设置样式表的方式?是,请参见的示例4-8,方法是将以下属性应用于节点:
stylesheets="fxmlexample/Login.css"
e、 g
您可以使用:
因为FXML中可用的元素和属性是从公共JavaFXJavaAPI派生的,所以您还可以使用FXML样式表元素(或可互换的属性)将样式表分配给父节点。当所有容器扩展父容器时,您可以在FXML中引用的任何容器上设置一个或多个自定义样式表:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.*?>
<?import java.net.URL?>
....
<?scenebuilder-stylesheet fruitcombo.css?>
<AnchorPane prefHeight="205.0" prefWidth="168.0"
styleClass="layout"
fx:controller="fruit.FruitComboController"
xmlns:fx="http://javafx.com/fxml">
<children>
....
</children>
<stylesheets>
<URL value="@fruitcombo.css" />
</stylesheets>
</AnchorPane>
有关评论的更新
警告:它是FXML 1.0,在2.0中不起作用,javafx.FXML.LoadException:URL不是有效的类型
我认为这个评论有点不正确。据我所知,目前没有FXML2.0这样的东西
评论者收到LoadException的原因是,本文中的指示性代码段没有将java.net.URL
类导入FXML文档。我更新了代码片段以包含java.net.URL
导入,并添加了一些省略号…
,以澄清代码片段的意图。a的意思是“一系列的点,通常表示文本中有意省略的单词、句子或整个部分,而不改变其原始含义”
为了更好地理解这个答案,建议编译并运行链接的示例代码
警告不要在FXMLLoader中使用InputStream加载函数
我强烈建议构造一个带有位置的新函数,而不是使用函数。如果使用static load()函数,则无法解析相对位置引用,因为FXML文件没有基本位置
也就是说,不要做:
InputStream input = this.getClass().getResourceAsStream("layout.fxml");
FXMLLoader loader = new FXMLLoader.load(input);
Parent content = loader.load();
相反,你应该:
String url = this.getClass().getResource("layout.fxml").toExternalForm();
FXMLLoader loader = new FXMLLoader(url);
Parent content = loader.load();
如果您打算将fxml与JavaFX一起使用,您应该花一些时间下载并使用SceneBuilder。一旦这样做了,css样式表的使用就变得简单了。当然,请使用NetBeans,因为在运行SceneBuilder的情况下,在NetBeans dxml样板应用程序中打开预构建的dxml文件会使其自动打开,以便在SceneBuilder中进行编辑。一旦你撕下所有的StackPlane、按钮和标签并放入你真正想要的控件和容器,只需直接将样式表添加到SceneBuilder中。在主菜单的“预览”下,有一个CSS样式表的菜单选项。选择它将打开一个子菜单,您可以在其中加载样式表文件
加载文件后,控件将根据样式表中的规则显示为蒙皮。只有在SceneBuilder的“属性”部分中选择每个控件并声明该样式表已应用于该控件后,它们才会显示该蒙皮。然后在应用程序运行时显示样式。我喜欢它比
方法更简洁(而且更容易查找,因为它必须在开始标记中)。
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.*?>
<?import java.net.URL?>
....
<?scenebuilder-stylesheet fruitcombo.css?>
<AnchorPane prefHeight="205.0" prefWidth="168.0"
styleClass="layout"
fx:controller="fruit.FruitComboController"
xmlns:fx="http://javafx.com/fxml">
<children>
....
</children>
<stylesheets>
<URL value="@fruitcombo.css" />
</stylesheets>
</AnchorPane>
<?scenebuilder-stylesheet fruitcombo.css?>
InputStream input = this.getClass().getResourceAsStream("layout.fxml");
FXMLLoader loader = new FXMLLoader.load(input);
Parent content = loader.load();
String url = this.getClass().getResource("layout.fxml").toExternalForm();
FXMLLoader loader = new FXMLLoader(url);
Parent content = loader.load();