如何在JavaFX项目中使用CSS文件?

时间:2015-02-15 14:07:16

标签: css javafx

我正在尝试构建JavaFX Application,我想在CSS file附加FXML file,但是当我尝试运行该应用时,我遇到了类似的问题:{ {1}}在控制台中我不知道究竟是什么问题(请注意,如果我删除CSS文件,一切正常)。 CSS文件" csstyle.css"包含:

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

我也在/* * Empty Stylesheet file. */ .mainFxmlClass { -fx-background-color: blue; } Stylesheet FXML file CSS file Style Class .mainFxmlClass中写了{{1}}。 所以我想知道错误,请帮助我,谢谢:)

1 个答案:

答案 0 :(得分:0)

你有两个问题:

第一个问题已经解决here。删除

stylesheets="@csstyle.css"

并在根容器的<children>标记之后添加它。由于您没有显示您的FXML文件是如何的,因此它应该是这样的:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.*?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import java.net.*?>

<AnchorPane styleClass="mainFxmlClass" ...>
   <children>
         ...
   </children>
   <stylesheets>
      <URL value="@cssstyle.css" />
   </stylesheets>
</AnchorPane>  

第二个就是这个:

styleClass=".mainFxmlClass"

删除点:

styleClass="mainFxmlClass"

修改

鉴于这些解决方案不起作用以及OP正在使用JDK 7和JavaFX 2.0,这些其他解决方案可能有所帮助:

替换:

styleClass="mainFxmlClass"

with:

<styleClass>
    <String fx:value="mainFxmlClass"/>
</styleClass> 

所以你的FXML会是这样的:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.*?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import java.net.*?>

<AnchorPane ...>
   <children>
         ...
   </children>
   <styleClass>
       <String fx:value="mainFxmlClass"/>
   </styleClass> 
   <stylesheets>
      <URL value="@cssstyle.css" />
   </stylesheets>
</AnchorPane> 

再试一次。

最后,如果它不起作用,请删除<stylesheets>标记,并在场景中设置样式表文件:

Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("cssstyle.css").toExternalForm());

所以你的FXML会是这样的:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.*?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>

<AnchorPane ...>
   <children>
         ...
   </children>
   <styleClass>
       <String fx:value="mainFxmlClass"/>
   </styleClass>
</AnchorPane> 

建议将JavaFX更新到更新的版本(2.2.45是Java 7的最后一个版本),并且可以从添加的许多新功能中受益。