'com.sun.javafx.scene.control.skin.ComboBoxBaseSkin'中没有定义有效的构造函数

问题描述 投票:0回答:1

我目前正在开发库存管理系统。在应用程序上更改场景时收到以下错误。仅当该屏幕包含一个组合框(如下图所示为大多数屏幕)时,才会显示错误。

一切运行正常,但我在下面看到错误。我相信这与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>'

以下是应用程序本身的一些屏幕截图:

Dashboard

Products

java css javafx scenebuilder
1个回答
0
投票

您有:

.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 skinControl。使用自定义外观是一种可以更改JavaFX应用程序外观的方式。但是,您的CSS指定ComboBoxBaseSkin这很奇怪,至少有两个原因:

  1. 这是一个abstract类,因此不能直接使用。
  2. 这是ComboBox的默认外观的直接超类(至少在JavaFX 9+中是:ComboBoxPopupControl

最终错误是由于ComboBoxBaseSkin的构造函数带有ComboBoxBase参数,而不是ComboBox参数(CSS似乎在寻找[[exact匹配项。)。

解决方案,似乎会出现,就是简单地从CSS中删除-fx-skin属性,然后让ComboBox使用其默认外观。或者,如果您实际上是在尝试使用自定义外观,请使用自定义外观类的完全限定名称作为值。


关于解析错误,-fx-font-weight期望该值为

weight

,如问题注释中@James_D所指出的。如果要更改尺寸,请使用-fx-font-size。您可以查看JavaFX CSS Reference Guide以了解有关JavaFX-CSS的更多信息。
© www.soinside.com 2019 - 2024. All rights reserved.