您在这里有几个选择。
首先,可以在JPA / Hibernate实体中使用FX属性,尽管您必须谨慎一些。简而言之,您需要确保使用属性访问,以便ORM调用get / set方法,而不是尝试直接设置字段。史蒂文?范?恩佩(Steven van Impe)在他的博客上对此进行了讨论,我也在同一个主题上发表了博客。我在这里没有尝试过的一件事是映射集合并使用ObservableList
s:这可能很棘手,因为JPA实现使用的子接口List
。
您的另一个选择是使属性成为Java Bean的“绑定属性”,然后使用Java Bean属性适配器:
import java.beans.PropertyChangeSupport ;
public class Person()
{
private int id;
private String name;
private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
public void addPropertychangelistener(Propertychangelistener listener) {
this.pcs.addPropertychangelistener(listener);
}
public void removePropertychangelistener(Propertychangelistener listener) {
this.pcs.removePropertychangelistener(listener);
}
public int getId()
{
return this.id;
}
public void setId(int id)
{
int oldId = this.id ;
this.id = id ;
pcs.firePropertyChange("id", oldId, id);
}
public String getName()
{
return this.name;
}
public void setName(String name)
{
String oldName = this.name ;
this.name = name ;
pcs.firePropertyChange("name", oldName, name);
}
}
那你可以做
Label nameLabel = new Label();
Person person = new Person();
nameLabel.textproperty().bind(JavaBeanStringPropertyBuilder.create()
.bean(person)
.name("name") // name of property to bind to
.build());