【问题标题】:createDefaultSkin() returned null error in JavaFX custom controlJavaFX 自定义控件中的 createDefaultSkin() 返回 null 错误
【发布时间】:2015-01-30 08:07:01
【问题描述】:

尊敬的 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,也找不到任何手动设置默认皮肤的方法。

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

【问题讨论】:

  • 没有皮肤怎么写自定义Control?只是将所有内容混合到一个类中?这肯定不是 JavaFX 开发人员所想的......
  • 我 2 天前刚开始使用 JavaFX,只是需要它来完成一项非常具体的任务。我知道这可能不是最佳实践,但是是的,所有内容都混合在这一类中并按预期显示在屏幕上。所以我想这不可能是错的:)

标签: javafx custom-controls


【解决方案1】:

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

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

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

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

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

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

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

如果您不需要可换肤控件,而只是想创建一个由其他控件组成的自定义控件,那么我建议编写 fx:root based control 而不是扩展 Control。也看看我的以下回答:Should we use FXML in JavaFX custom controls or not?

【讨论】:

  • 感谢您的回答!问题是我没有使用样式表,也没有可供参考的 css 文件。因为我也没有Skin 类(因为我不认为/希望我需要它)我不知道在 createDefaultSkin() 中返回什么。 eckig 说我的方式在政治上不正确可能是正确的,但它可以正常工作,我真的只需要一种简单的方法来避免 Java 声明为“严重”的错误消息(尽管应用程序没有崩溃) .
  • 成功了,非常感谢 :) 我最终扩展了 Pane 类,现在错误消失了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 2013-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多