我在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文件。
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()
);
答案 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文件中。