未找到Scene Builder中添加的CSS StyleSheet

时间:2014-09-16 22:54:23

标签: java css netbeans javafx-2 scenebuilder

我在Netbeans中遇到错误在通过Scene Builder将CSS样式表应用于JavaFX应用程序时。

Netbeans中的错误消息是:

  

null / FXMLDocument.css 2014年9月17日上午12:44:43   com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged

     

警告:找不到资源“FXMLDocument.css”。

我所做的就是添加位于与FXMLDocument.fxml文件相同的源文件夹中的css文件。

This is how I am applying CSS in Scene Builder to Main AnchorPane

FXML的开头如下:

<AnchorPane id="AnchorPane" fx:id="mainWindowPane" focusTraversable="true" stylesheets="@FXMLDocument.css" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="a.b.c.d.ui.FXMLDocumentController">

知道为什么会发生这种情况,我在这里错过了什么以及解决此问题的任何建议。

更新

这是开始方法:

@Override
public void start(Stage stage) throws Exception {

    try {
        setUserAgentStylesheet(STYLESHEET_MODENA);
        FXMLLoader loader = new FXMLLoader();
        Parent root = (Parent) loader.load(getClass().getResourceAsStream("ui/ParentWindow.fxml"));
        final ParentWindowController controller = (ParentWindowController) loader.getController();

        stage.addEventHandler(WindowEvent.WINDOW_SHOWN, controller::handleWindowShownEvent);
        stage.addEventHandler(WindowEvent.WINDOW_SHOWING, controller::handleWindowShowingEvent);
        stage.addEventHandler(WindowEvent.WINDOW_CLOSE_REQUEST, controller::handleWindowClosingRequestedEvent);

        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.setResizable(false);
        stage.toFront();
        stage.setTitle("Sample Code");
        stage.getIcons().add(new Image(getClass().getResourceAsStream("resources/images/Logo.jpg")));
        stage.show();
    } catch (IOException iOException) {
        iOException.printStackTrace();
    }
}

这是因为FXMLLoader loader = new FXMLLoader();对象,JavaFX无法解析FXML中css的绝对路径,然后是null/FXMLDocument.css

在start方法中添加以下行可以正常工作。

scene.getStylesheets().setAll(
getClass().getResource("ui/FXMLDocument.css").toExternalForm()
);

1 个答案:

答案 0 :(得分:1)

我正在研究mayne实现之一。我使用特定于css的包 并通过..\css\backgroundc.css

指向它

注意.. \指向此位置

如果你的css与fxml在同一个软件包中,只需添加..\FXMLDocument.css即可解决问题

如果您决定通过代码对其进行初始化,则可以使用: 例如,使用自定义CSS设计初始化场景

 scene.getStylesheets().setAll(
                    getClass().getResource(CSS_LOCATION).toExternalForm()
            );

至于CSS_LOCATION,可能是例如:

/myapp/ui/css/style.css

或者只是设置一些带有字符串的样式

node.setStyle("-fx-background-color:RED;");

^^ btw这并不限制你在字符串中只声明一个样式/;是分隔符,你可以添加更多。在正常的CSS文件中。