想象一下,我有一个POJO:
public class Person()
{
private int id;
private String name;
public int getId()
{
return this.id;
}
public String getName()
{
return this.name;
}
}
如果我需要使用bind()方法将name成员绑定到JavaFX标签,我无法应用,因为我需要和可观察的值。
我知道我可以使用StringProperty而不是String,但我需要原始类型,因为我使用Hibernate并且我不知道Hibernate是否可以支持JavaFX的属性来映射来自DB的数据。
我必须从我的pojo绑定到JavaFX控件?
答案 0 :(得分:4)
你有几个选择。
首先,可以在JPA / Hibernate实体中使用FX Properties,尽管你必须要小心一点。简而言之,您需要确保使用属性访问权限,以便ORM调用get / set方法,而不是尝试直接设置字段。 Steven van Impe discusses this on his blog,我也blogged on the same topic。我在这里尝试的一件事是映射集合并使用ObservableList
:这可能很棘手,因为JPA实现使用List
的子接口。
您的另一个选择是制作属性"绑定属性"在Java Bean意义上,然后使用Java Bean Property Adapter:
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());