JavaFX - 定义默认值 属性

JavaFX - Defining the default property

我创建了一个使用 fx:root 元素扩展 Region 的自定义控件。我的问题是,当我尝试加载它时,我得到一个 LoadException,声称我需要定义一个 DefaultProperty。据我所知,Region 不会将 getChildren() 公开为 public,以便让开发人员决定客户端是否可以自由添加内容。

我的问题是如何将 children 实际定义为默认值 属性?我尝试阅读文档,但他们只说明注释的用途,而不是如何使用。我也找不到任何例子。每次我尝试用 @DefaultProperty 注释字段或方法时,我都会得到编译错误 The annotation @DefaultProperty is disallowed for this location.

@DefaultProperty 注释是 class 级注释(文档中的 @Target(value=TYPE)),具有必需的 value 属性指定 属性.

因此以下方法可行:

@DefaultProperty("children")
public class SpecialRegion extends Region {

    @Override
    public ObservableList<Node> getChildren() {
        return super.getChildren();
    }
}

请注意,如果您不创建 getChildren() public,则 FXMLLoader 将无法以使其能够填充它的方式访问它。因此,即使使用 @DefaultProperty 注释,我认为如果不使用 getChildren() 方法 public,您也无法完成这项工作,如上所述。在这一点上,您也可以用 subclass Pane 代替 RegionPaneRegion 之间的唯一区别是 public getChildren() 方法和 DefaultProperty.