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").toExternalForm());
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 错误(属性样式表不存在)的主要内容,如果未能解决你的问题,请参考以下文章
Java开发桌面程序学习——css样式表使用以及Button悬浮改变样式实现