簡體   English   中英

JavaFX綁定非屬性成員來控制

[英]JavaFX bind not property member to control

想象一下,我有一個像這樣的POJO:

public class Person()
{
  private int id;
  private String name;

  public int getId()
  {
     return this.id;
  }

  public String getName()
  {
     return this.name;
  }
}

如果需要使用bind()方法將名稱成員綁定到JavaFX標簽,則無法應用,因為我需要一個可觀察的值。

我知道我可以使用StringProperty代替String,但是我需要原始類型,因為我使用Hibernate,而且我不知道Hibernate是否可以支持JavaFX的屬性來映射數據庫中的數據。

我必須從pojo綁定到JavaFX控件哪些替代方法?

您在這里有幾個選擇。

首先,可以在JPA / Hibernate實體中使用FX屬性,盡管您必須謹慎一些。 簡而言之,您需要確保使用屬性訪問權限,以便ORM調用get / set方法,而不是嘗試直接設置字段。 史蒂文•范•恩佩(Steven van Impe) 在他的博客上對此進行了討論 ,我也在同一個主題上發表了博客 我在這里沒有嘗試過的一件事是映射集合並使用ObservableList :這可能很棘手,因為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());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM