我创建了一个使用Region
元素扩展fx:root
的自定义控件。我的问题是,当我尝试加载它时,我得到LoadException
,声称我需要定义DefaultProperty
。据我所知,Region并未将getChildren()
公开为公开,以便让开发人员决定客户是否可以自由添加内容。
我的问题是如何将儿童定义为默认属性?我尝试阅读文档,但他们只说出注释的内容,而不是它是如何使用的。我还没有找到任何例子。每次我尝试用@DefaultProperty
注释一个字段或方法时,我只会得到编译错误The annotation @DefaultProperty is disallowed for this location
。
答案 0 :(得分:2)
@DefaultProperty
注释是类级注释(文档中为@Target(value=TYPE)
),其中包含指定属性名称的必需value
属性。
所以以下方法可行:
@DefaultProperty("children")
public class SpecialRegion extends Region {
@Override
public ObservableList<Node> getChildren() {
return super.getChildren();
}
}
请注意,如果您未公开getChildren()
,那么FXMLLoader
将无法以允许其填充的方式访问它。因此,即使使用@DefaultProperty
注释,我也认为如果不按上述getChildren()
方法public
进行此操作,您就无法完成此工作。此时,您可以继承Pane
而不是Region
:Pane
和Region
之间的唯一区别是public
getChildren()
方法和DefaultProperty
。