当前位置: 首页 > 知识库问答 >
问题:

在FXML中以声明方式设置样式表

宫瀚
2023-03-14
<link rel="stylesheet" ... >
scene.getStylesheets().add("/resources/shell.css");

是否有可能在FXML中设置样式表,类似于在HTML中设置样式表?

共有1个答案

董俊晖
2023-03-14

您可以使用以下方法在父节点上设置样式表:

parent.getStylesheets().add("/resources/shell.css");

因为FXML中可用的元素和属性是从公共JavaFX Java API派生出来的,所以您还可以使用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文件引用css文件的完整可执行示例,请参见本示例中的fxml文件。

<?scenebuilder-stylesheet fruitcombo.css?>

警告:它是FXML1.0,在2.0中不起作用,javafx.FXML.LoadException:URL不是有效类型。

我认为这个评论有点不正确。据我所知,目前还没有FXML2.0这样的东西。

评论者收到LoadException的原因是,这篇文章中的指示性代码段没有将java.net.url类导入到FXML文档中。我更新了这个代码片段,以包括java.net.url导入,并添加了一些省略号...来澄清这个代码片段的意图。省略是指“一系列的圆点,通常表示有意从文本中省略一个词、句子或整个部分,而不改变其原意”。

我强烈建议构造一个带有位置的新FXMLLoader,而不是使用FXMLLoader.load(InputStream)函数。当使用静态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();  
 类似资料:
  • 我习惯于用JavaFx编写如下所示的代码,因为这就是我几年前学习的方式。 我最近安装了JetBrains IntelliJ IDEA Ultimate Edition 2018.1.6,我发现要打开primaryStage窗口,我需要一个fxml文件。 我必须这么做, 如果我运行第一个代码片段,什么都不会显示。但是如果我用FXMLLoader.load(getClass(). getResourc

  • 启用forbide-prop-type规则后,eslint禁止我使用,建议使用。 但是真的有必要像这样定义所有可用的属性吗? 太多的定义代码!

  • 有没有办法以编程方式自定义这些TextInputLayout属性: textColorHint 彩色口音 颜色控制正常 颜色控制已激活 文本选择句柄 我知道如何使用主题属性对它们进行样式化,但是我正在处理的项目动态地加载颜色信息,据我所知,在运行时无法更改主题/样式值。

  • 如何以编程方式设置属性?

  • 问题内容: 我需要有关在Openpyxl中设置样式的建议。 我看到可以设置单元格的NumberFormat,但是我还需要设置字体颜色和属性(粗体等)。有一个style.py类,但是似乎我无法设置单元格的style属性,而且我真的不想开始修改openpyxl源代码。 有没有人找到解决方案? 问题答案: 从openpyxl版本1.5.7开始,我已成功应用以下工作表样式选项… 仅供参考,您可以在…中找到

  • 在Jenkins脚本管道中,您可以像这样设置PATH env变量: 注意这里解释的路径MAVENhttps://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#code-withenv代码集环境变量: 要设置的环境变量列表,每个变量的形式为VARIABLE=value或VARIABLE=以取消设置其他定义的变量。您还可以使用语法PATH wh