createDefaultSkin() 在 JavaFX 自定义控件中返回空错误

createDefaultSkin() returned null error in JavaFX custom control

亲爱的 Whosebug 社区,

我在 JavaFX 中实现了自定义控件扩展 Control class。 一切正常,但我不断收到错误消息

Jan 30, 2015 8:33:31 AM javafx.scene.control.Control impl_processCSS
SEVERE: The -fx-skin property has not been defined in CSS for 
CustomView@19e4d42 and createDefaultSkin() returned null.

当我运行申请时。

我阅读了很多关于 SkinBaseBehaviorBase 的内容,但由于一切都按预期工作,我希望这个错误在不实施这些 classes 的情况下消失如果可能的话。

我没有使用 CSS,而且我找不到任何方法来手动设置默认皮肤。

非常感谢您的帮助。提前致谢!

自从 JavaFX 8(随 Java SE 8 一起提供)以来,就有了 createDefaultSkin() 方法,您可以(应该?)在自定义控件中覆盖它。

此外,我建议在自定义控件的构造函数中调用以下语句:

getStyleClass().setAll("my-custom-control");

然后覆盖方法 getUserAgentStylesheet() 并在引用的 css 文件中添加:

.my-custom-control {
    -fx-skin: "mypackage.impl.skin.MyCustomControlSkin";
}

此引用 class 是自定义控件的默认外观。

但是正如文档和错误消息所解释的那样,也可以只覆盖提到的方法或只提供 css。

如果您不需要可换肤控件,而只想创建一个由其他控件组成的自定义控件,那么我建议您编写 fx:root based control instead of extending Control. Also have a look at my following answer: Should we use FXML in JavaFX custom controls or not?