我目前正在开发库存管理系统。在应用程序上更改场景时收到以下错误。仅当该屏幕包含一个组合框(如下图所示为大多数屏幕)时,才会显示错误。
一切运行正常,但我在下面看到错误。我相信这与CSS中的CSS组合框样式有关。
先前与CSS有关的错误的背景:最初,我在定位CSS的文件时遇到了麻烦,并收到错误null / styles.css。我通过将以下stylesheets="@style.css"
更改为stylesheets="/stock/style.css"
来解决。不知道这是否会影响我想提及的任何内容,以防万一与此有关,即使错误在更改之前仍在显示。
May 19, 2020 6:31:50 PM javafx.scene.control.Control loadSkinClass
SEVERE: No valid constructor defined in 'com.sun.javafx.scene.control.skin.ComboBoxBaseSkin' for control ComboBox[id=comboStatus, styleClass=combo-box-base combo-box].
You must provide a constructor that accepts a single Skinnable (e.g. Control or PopupControl) parameter in com.sun.javafx.scene.control.skin.ComboBoxBaseSkin.
CSS如下:
.combo-box .list-cell {
-fx-background: #2D75E8;
-fx-background-color: transparent;
-fx-text-fill: white;
-fx-padding: 3 0 2 7;
-fx-cell-size: 1.96667em;
-fx-font-weight: bold;
}
.combo-box .list-view .list-cell {
-fx-text-fill: white;
-fx-font-weight: bold;
}
.combo-box-popup .list-view {
-fx-background-color: #2D75E8, #2D75E8;
-fx-background-insets: 0, 1;
-fx-effect: dropshadow(three-pass-box, rgba(0, 0, 0, 0.6), 8, 0.0, 0, 0);
-fx-font-weight: bold;
}
.combo-box-popup .list-view .list-cell {
-fx-padding: 4 0 4 5;
-fx-font-weight: bold;
/* No alternate highlighting */
-fx-background-color: #2D75E8;
}
.combo-box-popup .list-view .list-cell:filled:selected, .combo-box-popup .list-view .list-cell:filled:selected:hover {
-fx-background: -fx-accent;
-fx-background-color: -fx-selection-bar;
-fx-text-fill: white;
}
.combo-box-popup .list-view .list-cell:filled:hover {
-fx-background-color: #2D75E8;
-fx-text-fill: white;
-fx-font-weight: bold;
}
.combo-box-base {
-fx-skin: "com.sun.javafx.scene.control.skin.ComboBoxBaseSkin";
-fx-background-color: #2D75E8, #2D75E8, #2D75E8, #2D75E8;
-fx-background-radius: 5, 5, 4, 3;
-fx-background-insets: 0 0 -1 0, 0, 1, 2;
-fx-padding: 0;
-fx-font-weight: bold;
}
.combo-box-base:hover {
-fx-color: -fx-hover-base;
}
.combo-box-base:showing {
-fx-color: -fx-pressed-base;
}
我也在某些屏幕上收到CSS解析错误,如下所示:
May 19, 2020 7:08:55 PM com.sun.javafx.css.parser.CSSParser declaration
WARNING: CSS Error parsing '*{-fx-text-inner-color: #3f5cc3; -fx-font-weight: 15px;}: Expected '<font-weight>' while parsing '-fx-font-weight' at [1,50]
即使错误显示了预期的情况,我也不十分了解我希望它如何格式化。为什么需要为'<font-weight>'
?
以下是应用程序本身的一些屏幕截图:
您有:
.combo-box-base {
-fx-skin: "com.sun.javafx.scene.control.skin.ComboBoxBaseSkin";
-fx-background-color: #2D75E8, #2D75E8, #2D75E8, #2D75E8;
-fx-background-radius: 5, 5, 4, 3;
-fx-background-insets: 0 0 -1 0, 0, 1, 2;
-fx-padding: 0;
-fx-font-weight: bold;
}
这是您的错误根源。具体来说:
-fx-skin: "com.sun.javafx.scene.control.skin.ComboBoxBaseSkin";
这是告诉JavaFX使用指定的类作为Skin
实现,该实现用于具有.combo-box-base
样式类的所有控件。此属性的目的是用自定义参数覆盖the default skin的Control
。使用自定义外观是一种可以更改JavaFX应用程序外观的方式。但是,您的CSS指定ComboBoxBaseSkin
这很奇怪,至少有两个原因:
ComboBox
的默认外观的直接超类(至少在JavaFX 9+中是:ComboBoxPopupControl
。最终错误是由于ComboBoxBaseSkin
的构造函数带有ComboBoxBase
参数,而不是ComboBox
参数(CSS似乎在寻找[[exact匹配项。)。
-fx-skin
属性,然后让ComboBox
使用其默认外观。或者,如果您实际上是在尝试使用自定义外观,请使用自定义外观类的完全限定名称作为值。-fx-font-weight
期望该值为weight
,如问题注释中@James_D所指出的。如果要更改尺寸,请使用-fx-font-size
。您可以查看JavaFX CSS Reference Guide以了解有关JavaFX-CSS的更多信息。