【发布时间】:2017-04-17 18:57:13
【问题描述】:
我正在尝试创建一个用于 FXML 的自定义 JavaFX 元素,但是当FXMLLoader 尝试解析它时,它会抛出一个异常,指出:
javafx.fxml.LoadException:元素未定义默认属性。
但是,经过一些研究,我相信我正确定义了默认属性。
如果我包含nestedCellValueFactory 标签,一切都会按预期工作。
Java
@DefaultProperty("nestedCellValueFactory")
public class NestablePropertyValueFactory<S, T> extends PropertyValueFactory<S, T> {
private ObjectProperty<PropertyValueFactory<?, ?>> nestedCellValueFactory;
public NestablePropertyValueFactory(
@NamedArg("property") String property,
@NamedArg("nestedCellValueFactory") PropertyValueFactory<?, ?> nestedCellValueFactory) {
super(property);
this.nestedCellValueFactory = new SimpleObjectProperty<>(this, "nestedCellValueFactory", nestedCellValueFactory);
}
public final ObjectProperty<PropertyValueFactory<?, ?>> nestedCellValueFactoryProperty() {
return nestedCellValueFactory;
}
public final PropertyValueFactory<?, ?> getNestedCellValueFactory() {
return nestedCellValueFactoryProperty().get();
}
public final void setNestedCellValueFactory(PropertyValueFactory<?, ?> nestedCellValueFactory) {
nestedCellValueFactoryProperty().set(nestedCellValueFactory);
}
}
FXML
<NestablePropertyValueFactory property="outer">
<NestablePropertyValueFactory property="inner">
<PropertyValueFactory property="property"/>
</NestablePropertyValueFactory>
</NestablePropertyValueFactory>
【问题讨论】:
-
另外,我知道 IDE 的建议并不是衡量实现准确性的可靠标准,但 IntellJ 一直建议我删除
元素,因为它是默认属性,所以我必须相信我至少在某些方面是正确的。 -
我最初使用 JDK 1.8.0_92 运行它,但我切换到 1.8.0_121 并得到了相同的结果。