JavaFX CSS 错误(属性样式表不存在)

Posted

技术标签:

【中文标题】JavaFX CSS 错误(属性样式表不存在)【英文标题】:JavaFX CSS Error ( Property Stylesheets does not exist ) 【发布时间】:2014-03-06 03:58:01 【问题描述】:

我刚刚开始使用最新的 Java7 SDK 在 IntelliJ 中构建 JavaFX 应用程序。

我使用 Oracle Scene Builder 构建了我的界面,一切都运行并在预览中显示正常,但是当我尝试编译我的程序时,我收到以下错误

`Property "stylesheets" does not exist or is read-only`

根据 JavaFX 文档判断,我的 FXML 中的 stylesheets="@MainView.css" 行似乎并不无效。

有人知道我为什么会收到这个错误吗? (如果我删除样式表的链接,我的程序编译得很好,所以问题完全出在样式表上,我很难过!)

【问题讨论】:

【参考方案1】:

您在 Scene Builder 2 中创建 FXML 并在 JDK 7 中运行。SB 2“尝试”创建与 Java 8 兼容的 FXML 代码。修复 FXML:

    删除stylesheets="@MainView.css" 属性 在导入中添加<?import java.net.*?>

    在父窗格的末尾添加以下代码,在</children> 之后(在我的例子中是在</AnchorPane> 之前):

    <stylesheets>
      <URL value="@MainView.css" />
    </stylesheets>
    

【讨论】:

【参考方案2】:

原来我需要在我的 start() 方法中手动链接样式表,因为 JavaFX7 不支持样式表标签。

为了解决这个问题,我在 Start() 方法中调用了以下命令

root.getStylesheets().add(this.getClass().getResource("view/MainView.css").toExt‌​ernalForm());

root 是我的 FXMLLoader 的名称。

【讨论】:

【参考方案3】:

当我尝试在我的程序中设置我自己的 CSS 属性时,我遇到了同样的错误。如果您不这样做,您可能正在使用一些使用 JavaFX 8 中引入的CSS library 的类。

尝试将您的 JDK 更新到最新发布的版本here。

如果这仍然无法正常工作,则说明您的应用程序中的某个位置没有正确读取 CSS 文件。可能有些类的 JavaFX bean 属性映射错误。

【讨论】:

嗨 Loa,感谢您的建议。我更新到JDK8并且问题得到解决,但是我需要在JDK7上交付项目,我找到了问题的解决方案,我想如果你有兴趣我会与你分享。在您的 start() 方法中,只需使用 root.getStylesheets().add(this.getClass().getResource("view/MainView.css").toExternalForm()) 手动加载样式表;其中 root 是您的 FXMLLoader 的名称 :) 哦,谢谢分享,我会将您的问题定义为我的最爱之一。很高兴对您有所帮助。我希望你能完成你的项目。祝你好运! :)【参考方案4】:

打开 Scene Builder 时出现此错误。

安装了 jdk1.8,将其设置为我系统的默认值(在 /usr/lib/jvm/default-java 中)并修改了我的 $PATH,但似乎都没有帮助。

然后将 Scene Builder 从 1.1 更新到 2.0,将 1.1 二进制文件链接到 2.0 版本 (see this question),最后在 Netbeans -> tools -> options -> Java -> JavaFX 中设置新的 Scene Builder 路径,其中解决了这个问题。更新默认 jdk 版本可能与此有关,也可能无关。

项目本身已经使用了jdk1.8,运行起来没有问题;我只是在 Scene Builder 中打开它们时遇到了问题(问题标题中提到了那个错误)。

【讨论】:

以上是关于JavaFX CSS 错误(属性样式表不存在)的主要内容,如果未能解决你的问题,请参考以下文章

一些 CSS 属性在 JavaFX 2.1 中无法正常工作

javafx中每个.css文件和行的“未知属性”警告

Java开发桌面程序学习——css样式表使用以及Button悬浮改变样式实现

属性选择器如何在JavaFX中工作?

在 CSS (JavaFX) 中为 TableView 设置样式

css样式