将POJO转换为JavaFX属性

时间:2014-05-29 19:07:19

标签: java properties javafx javafx-8 pojo

在我的项目中,我有许多POJO,其字段显示在JavaFX GUI中。我目前使用手动刷新更新UI - 每当POJO更改时,我调用refresh()方法。我想尝试使用绑定来实现这一点,这需要使用JavaFX属性。虽然我可以更改对象,但其内部字段是其他对象,我无法更改(它们使用GSON填充,AFAIK使用'普通' Java对象 - 例如字符串,而不是StringProperty)。此外,该对象是只读的 - 它只有getter,而不是setter。

我相信我可以使用ReadOnlyJavaBeanObjectPropertyBuilder(yay Java命名?)或ReadOnlyObjectWrapper将对象包装为属性。但是,内部字段 - 我想将标签绑定到的字段 - 不会转换为属性。有没有办法进行这样的递归转换 - 将包含普通对象字段的整个对象转换为包含更多属性的属性?这甚至是必要的 - 我做错了吗?

编辑:我怀疑任何解决方案都必须使用反射。

2 个答案:

答案 0 :(得分:4)

我不确定,但请查看BeanPathAdapter

它是JFXtras-Labs的一部分,可下载jar

GitHub上的来源是here

答案 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发生变化(例如新属性等),则需要更新相应的适配器。