JavaFX使用CSS样式部署了应用程序问题

时间:2014-11-11 18:25:07

标签: java css maven netbeans javafx

我创建了一个带有一些资源文件的JavaFX Maven应用程序(在项目文件夹" src / main / resources")。该应用程序在NetBeans环境中运行良好。但是,当构建自包含的JAR文件并将其复制到另一个文件夹时,应用程序的可视项目(ComboBoxes,TextFields,VBoxes,...)无法正确显示(不同的颜色,错误的填充,。 ..)。

例如,this screenshot显示正确的可视化(在Netbeans环境中获得),而this screenshot则没有。这里,区别在于ComboBox悬停项目的颜色(错误版本中为白色)和ComboBox栏的大小。这些样式存在于CSS文件中(在" src / main / resources / styles"中)。

我不明白为什么在部署的JavaFX Maven应用程序中没有正确应用CSS。有些样式仍然有效(例如Buttons样式)但有些样式没有(例如ComboBoxes文本)。

我该怎么做才能防止这种情况发生?

更新:

CSS文件存在于JAR文件中,因为某些样式(例如Buttons样式)在应用程序(NetBeans外部)中正确加载。这是我用来将样式表加载到JavaFX场景中的代码:

scene.getStylesheets().add(this.getClass().getResource("/styles/styles.css").toExternalForm());

" styles.css"文件保存在" src / main / resources / styles / styles.css"。

例如,Java代码中应用了以下样式:

Button save = new Button("Save");
save.getStyleClass().add("primary-button"); // -> It works

不起作用的样式包括那些没有直接样式的样式。它们会影响所有ComboBox,CheckBox等。例如:

.combo-box-popup {
    -fx-min-width: 555px;
}

.combo-box-popup .list-view {
    -fx-min-width: 555px;
}

.combo-box-base  {
    -fx-background-color: transparent, transparent, transparent, white;
    -fx-border-width: 1;
    -fx-border-color: #666666;
    -fx-font-family: "Roboto Light";
    -fx-font-size: 14px;
    -fx-fill: #666666;
}

.combo-box .arrow {
    -fx-background-color: #979797;
    -fx-background-radius: 0;
}

.combo-box .arrow-button {
   -fx-background-color: #d8d8d8;
   -fx-background-radius: 0;
}

.combo-box .arrow-button:hover {
    -fx-background-color: #e1e1e1;
    -fx-background-radius: 0;
}

.combo-box-popup .list-view .list-cell:filled:selected, .combo-box-popup .list-view .list-cell:filled:selected:hover {
    -fx-background-color: #6995df;
}

.combo-box-popup .list-view .list-cell:filled:hover {
    -fx-background-color: #f3f3f3;
}

Netbeans IDE版本:8.0.1。

JavaFX版本:8(来自JDK 1.8.0_25)。

计算机JRE版本:1.8.0_25。

我希望这有助于理解这个问题。

1 个答案:

答案 0 :(得分:0)

在对CSS文件进行一些更改之后,我意识到JavaFX 8已经改变了CSS中的一些功能(例如背景)并添加了一些新的默认样式(例如ComboBoxes中的白色文本)。

最后,我更改并添加了一些样式到我的CSS文件。现在,CSS效果很好。谢谢!