在我的项目中,我有许多POJO,其字段显示在JavaFX GUI中。我目前使用手动刷新更新UI - 每当POJO更改时,我调用refresh()
方法。我想尝试使用绑定来实现这一点,这需要使用JavaFX属性。虽然我可以更改对象,但其内部字段是其他对象,我无法更改(它们使用GSON填充,AFAIK使用'普通' Java对象 - 例如字符串,而不是StringProperty)。此外,该对象是只读的 - 它只有getter,而不是setter。
我相信我可以使用ReadOnlyJavaBeanObjectPropertyBuilder(yay Java命名?)或ReadOnlyObjectWrapper将对象包装为属性。但是,内部字段 - 我想将标签绑定到的字段 - 不会转换为属性。有没有办法进行这样的递归转换 - 将包含普通对象字段的整个对象转换为包含更多属性的属性?这甚至是必要的 - 我做错了吗?
编辑:我怀疑任何解决方案都必须使用反射。
答案 0 :(得分:4)
答案 1 :(得分:2)
POJO的适配器怎么样?
实施例
public class Person{
private String name;
private Address addr;
\\getters, setters...
}
对于JavaFX GUI
public class FXPerson{
public FXPerson(Person p){
this.name = \\build StringProperty
this.fxaddr = \\build ObjectProperty<FXAddress>
}
private StringProperty name;
private ObjectProperty<FXAddress> fxaddr;
}
缺点: 对于每个POJO,您必须编写适配器。如果POJO发生变化(例如新属性等),则需要更新相应的适配器。