JavaFX CSS 未部署
JavaFX CSS doesn't get deployed
我有问题。在我的 JavaFX 项目中,我在 MainApplication
class:
中创建了以下方法
private VBox createMenuButton(String menuItemName) {
final Background focusBackground = new Background( new BackgroundFill(Color.rgb(255,177,86), CornerRadii.EMPTY, Insets.EMPTY ));
final Background unfocusBackground = new Background( new BackgroundFill(Color.rgb(226,129,15), CornerRadii.EMPTY, Insets.EMPTY ));
// Vertical box
VBox btnMenu = new VBox();
btnMenu.setId("btnMenu");
btnMenu.setAlignment(Pos.BASELINE_LEFT);
btnMenu.setSpacing(10);
btnMenu.setMinHeight(30);
btnMenu.setMinWidth(160);
// Label
Label lblMenuButton = new Label(menuItemName);
lblMenuButton.setFont(new Font("Roboto", 20));
lblMenuButton.setTextFill(Color.WHITE);
// White underline
Rectangle underline = new Rectangle ();
underline.setHeight(1);
underline.setWidth(160);
underline.setFill(Color.WHITE);
btnMenu.getChildren().addAll(lblMenuButton, underline);
return btnMenu;
}
这将创建一个 VBox
,在该标签的内部和下方有一条 Label
一条白线。然后我想让它在你悬停在它上面时改变颜色,所以我做了以下简单的 CSS (menu.css):
#btnMenu:hover {
background-color: #ffb156;
}
那是整个 css 文件,所以我觉得没问题。最后我像这样导入 css 文件:
scene.getStylesheets().add(MainApplication.class.getResource("stylesheets/menu.css").toExternalForm());
但这给了我一个NullPointerException
。这是完整的项目树:
如您所见,CSS 文件夹和文件不在正在部署的 target
文件夹中,因此出现问题。我不知道如何找到有关该错误的更多详细信息,但在谷歌搜索后它可能是一个解析错误。关键是我的CSS看起来没有错,而且不多,直接看错就可以了
有人能告诉我为什么我的 css 没有部署吗?
Maven 定义了一个 "standard directory layout",除其他外,它表示:
- 生产 Java 源文件在
src/main/java
下
- 生产资源归入
src/main/resources
默认情况下,基本上 src/main/java
目录下任何不以 .java
结尾的文件都会被忽略。您可以使用 POM 文件中的某些配置更改此行为,但我会坚持使用 Maven 约定,除非您需要做其他事情(或者只是真的不同意他们而任何其他团队成员同意您)。请注意,Gradle 对来源和资源采用了相同的约定。
如果您希望 CSS 文件包含在输出中,同时将其保存在您现在所在的同一个包中,那么您应该将文件移动到 src/main/resources/practicumopdracht/stylesheets/menu.css
。
我有问题。在我的 JavaFX 项目中,我在 MainApplication
class:
private VBox createMenuButton(String menuItemName) {
final Background focusBackground = new Background( new BackgroundFill(Color.rgb(255,177,86), CornerRadii.EMPTY, Insets.EMPTY ));
final Background unfocusBackground = new Background( new BackgroundFill(Color.rgb(226,129,15), CornerRadii.EMPTY, Insets.EMPTY ));
// Vertical box
VBox btnMenu = new VBox();
btnMenu.setId("btnMenu");
btnMenu.setAlignment(Pos.BASELINE_LEFT);
btnMenu.setSpacing(10);
btnMenu.setMinHeight(30);
btnMenu.setMinWidth(160);
// Label
Label lblMenuButton = new Label(menuItemName);
lblMenuButton.setFont(new Font("Roboto", 20));
lblMenuButton.setTextFill(Color.WHITE);
// White underline
Rectangle underline = new Rectangle ();
underline.setHeight(1);
underline.setWidth(160);
underline.setFill(Color.WHITE);
btnMenu.getChildren().addAll(lblMenuButton, underline);
return btnMenu;
}
这将创建一个 VBox
,在该标签的内部和下方有一条 Label
一条白线。然后我想让它在你悬停在它上面时改变颜色,所以我做了以下简单的 CSS (menu.css):
#btnMenu:hover {
background-color: #ffb156;
}
那是整个 css 文件,所以我觉得没问题。最后我像这样导入 css 文件:
scene.getStylesheets().add(MainApplication.class.getResource("stylesheets/menu.css").toExternalForm());
但这给了我一个NullPointerException
。这是完整的项目树:
如您所见,CSS 文件夹和文件不在正在部署的 target
文件夹中,因此出现问题。我不知道如何找到有关该错误的更多详细信息,但在谷歌搜索后它可能是一个解析错误。关键是我的CSS看起来没有错,而且不多,直接看错就可以了
有人能告诉我为什么我的 css 没有部署吗?
Maven 定义了一个 "standard directory layout",除其他外,它表示:
- 生产 Java 源文件在
src/main/java
下
- 生产资源归入
src/main/resources
默认情况下,基本上 src/main/java
目录下任何不以 .java
结尾的文件都会被忽略。您可以使用 POM 文件中的某些配置更改此行为,但我会坚持使用 Maven 约定,除非您需要做其他事情(或者只是真的不同意他们而任何其他团队成员同意您)。请注意,Gradle 对来源和资源采用了相同的约定。
如果您希望 CSS 文件包含在输出中,同时将其保存在您现在所在的同一个包中,那么您应该将文件移动到 src/main/resources/practicumopdracht/stylesheets/menu.css
。