JavaFX 扩展 PropertyValueFactory
JavaFX extending PropertyValueFactory
我有一个对象的 TableView,其中包含映射到其他类型的其他对象的 ID。我需要一个 TableColumn,它不显示 id,而是显示映射到 id 的对象。我想我可以通过创建自己的 PropertyValueFactory 来做到这一点,就像这样:
public class SomePropertyValueFactory extends PropertyValueFactory<SomeObject, String> {
public SomePropertyValueFactory(String property) {
super(property);
}
@Override
public ObservableValue<String> call(CellDataFeatures<SomeObject, String> parameter) {
SomeOtherObject obj = function(parameter.getValue().getId());
return obj.toString();
}
}
这是可行的解决方案吗?它会正常运行吗?我已经试过了,但是抛出了一个 LoadException:
Caused by: java.lang.InstantiationException: ui.view.SomePropertyValueFactory
at java.lang.Class.newInstance(Unknown Source)
at sun.reflect.misc.ReflectUtil.newInstance(Unknown Source)
... 21 more
Caused by: java.lang.NoSuchMethodException: ui.view.SomePropertyValueFactory.<init>()
at java.lang.Class.getConstructor0(Unknown Source)
... 23 more
如果您打算让 FXML 使用 class,它必须有一个无参数的构造函数,或者(在 JavaFX 8 中)它必须有一个参数被注释的构造函数 @NamedArg
.所以你可以做
public class SomePropertyFactory ... {
public SomePropertyFactory(@NamedArg("property") String property) {
// ...
}
// ...
}
此外,您发布的代码无法编译,因为 call
方法的 return 值是 String
,而它应该是 ObservableValue<String>
。
但是,我完全看不出将其作为 PropertyValueFactory
的子class 有什么意义。为什么不直接实现 Callback
呢?这个 class 的唯一用途是在 setCellValueFactory(...)
中,参数类型是 Callback
。而且你似乎根本没有从你的 superclass.
继承任何东西
我有一个对象的 TableView,其中包含映射到其他类型的其他对象的 ID。我需要一个 TableColumn,它不显示 id,而是显示映射到 id 的对象。我想我可以通过创建自己的 PropertyValueFactory 来做到这一点,就像这样:
public class SomePropertyValueFactory extends PropertyValueFactory<SomeObject, String> {
public SomePropertyValueFactory(String property) {
super(property);
}
@Override
public ObservableValue<String> call(CellDataFeatures<SomeObject, String> parameter) {
SomeOtherObject obj = function(parameter.getValue().getId());
return obj.toString();
}
}
这是可行的解决方案吗?它会正常运行吗?我已经试过了,但是抛出了一个 LoadException:
Caused by: java.lang.InstantiationException: ui.view.SomePropertyValueFactory
at java.lang.Class.newInstance(Unknown Source)
at sun.reflect.misc.ReflectUtil.newInstance(Unknown Source)
... 21 more
Caused by: java.lang.NoSuchMethodException: ui.view.SomePropertyValueFactory.<init>()
at java.lang.Class.getConstructor0(Unknown Source)
... 23 more
如果您打算让 FXML 使用 class,它必须有一个无参数的构造函数,或者(在 JavaFX 8 中)它必须有一个参数被注释的构造函数 @NamedArg
.所以你可以做
public class SomePropertyFactory ... {
public SomePropertyFactory(@NamedArg("property") String property) {
// ...
}
// ...
}
此外,您发布的代码无法编译,因为 call
方法的 return 值是 String
,而它应该是 ObservableValue<String>
。
但是,我完全看不出将其作为 PropertyValueFactory
的子class 有什么意义。为什么不直接实现 Callback
呢?这个 class 的唯一用途是在 setCellValueFactory(...)
中,参数类型是 Callback
。而且你似乎根本没有从你的 superclass.