JavaFX - 定义默认属性

时间:2015-04-21 16:57:52

标签: java javafx fxml

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

我的问题是如何将儿童定义为默认属性?我尝试阅读文档,但他们只说出注释的内容,而不是它是如何使用的。我还没有找到任何例子。每次我尝试用@DefaultProperty注释一个字段或方法时,我只会得到编译错误The annotation @DefaultProperty is disallowed for this location

1 个答案:

答案 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而不是RegionPaneRegion之间的唯一区别是public getChildren()方法和DefaultProperty