亲爱的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.
当我运行应用程序时。
我读了很多关于SkinBase
和BehaviorBase
的内容,但由于一切正常,我希望如果可能的话,如果没有实现这些类,这个错误就会消失。
我没有使用CSS,但我无法找到任何手动设置默认皮肤的方法。
我真的很感谢你的帮助。提前谢谢!
答案 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?