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

时间:2015-01-30 08:07:01

标签: javafx custom-controls

亲爱的Stackoverflow社区,

我在JavaFX中实现了一个扩展Control类的自定义控件。 一切都工作正常,但我一直收到错误消息

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的内容,但由于一切正常,我希望如果可能的话,如果没有实现这些类,这个错误就会消失。

我没有使用CSS,但我无法找到任何手动设置默认皮肤的方法。

我真的很感谢你的帮助。提前谢谢!

1 个答案:

答案 0 :(得分:0)

由于JavaFX 8(Java SE 8附带),有方法createDefaultSkin() - 方法,您可以(应该?)在自定义控件中覆盖。

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

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

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

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

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

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

如果你不需要skinnable控件但只想创建一个由其他控件组成的自定义控件,那么我建议你写一个fx:root based control而不是扩展Control。另请查看我的以下答案:Should we use FXML in JavaFX custom controls or not?