我有一个自定义控件 ChoiceTextField
,对应 ChoiceTextFieldSkin
.
protected Skin<?> createDefaultSkin() {
return new ChoiceFieldSkin<T, ChoiceTextField<T>>(this);
}
正确显示控件,但我得到以下 Exception
:
Failed to load skin 'com.gluonhq.impl.charm.a.b.a.ap' for control ChoiceTextField[id=choiceCounter, styleClass=choice-field colored button flat]
java.lang.IllegalArgumentException: argument type mismatch
我可以通过设置CSS文件中的皮肤来解决错误:
.choice-field{
-fx-skin: "com.energymeter.control.skin.ChoiceFieldSkin";
}
但我想知道是什么导致 Exception
1 回答
这段简短的代码片段用于创建具有自定义控件的视图:
显示相同的异常:
如果您查看
Control.createDefaultSkin()
的javadoc:(大胆是我的) .
当你设置
getStyleClass().add("button")
时,事实证明Charm会覆盖ButtonSkin以通过CSS提供连锁效果,所以你有例外 .正如您所提到的,如果您通过CSS显式设置外观,则不会发生此异常: