5

我是 JavaFX 新手,我正在尝试将旧的 Swing 应用程序重构为 JavaFX 应用程序。

我还使用 JPA(带有 EclipseLink 实现)来保存/检索数据。
所以我定义了一些带注释的 POJO。

下面是我带注释的 POJO:

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Transient;

/**
 *
 * @author alex
 */
@Entity
@Table(name = "materiale", catalog = "elledia", schema = "")
public class Materiale implements Serializable {
  @Transient
  private static final long serialVersionUID = 1L;

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Basic(optional = false)
  @Column(name = "id")
  private Long id;

  @Basic(optional = false)
  @Column(name = "colata")
  private String colata;

  @Basic(optional = false)
  @Column(name = "dimensione")
  private String dimensione;

  @Basic(optional = false)
  @Column(name = "specifica")
  private String specifica;

  @Basic(optional = false)
  @Column(name = "unita_misura")
  private String unitaMisura;

  @Column(name = "version")
  private Integer version;

  @ManyToOne (fetch = FetchType.LAZY)
  @JoinColumn (name = "certificato_id")
  private Certificato certificato;

  public Materiale(Long id, String colata, String dimensione, String specifica, String unitaMisura, Certificato certificato) {
    this.id = id;
    this.colata = colata;
    this.dimensione = dimensione;
    this.specifica = specifica;
    this.unitaMisura = unitaMisura;
    this.certificato = certificato;
  }

  public Long getId() {
    return id;
  }

  public void setId(Long id) {
    Long oldId = this.id;
    this.id = id;
  }

  public String getColata() {
    return colata;
  }

  public void setColata(String colata) {
    String oldColata = this.colata;
    this.colata = colata;
  }

  public String getDimensione() {
    return dimensione;
  }

  public void setDimensione(String dimensione) {
    String oldDimensione = this.dimensione;
    this.dimensione = dimensione;
  }

  public String getSpecifica() {
    return specifica;
  }

  public void setSpecifica(String specifica) {
    String oldSpecifica = this.specifica;
    this.specifica = specifica;
  }

  public String getUnitaMisura() {
    return unitaMisura;
  }

  public void setUnitaMisura(String unitaMisura) {
    String oldUnitaMisura = this.unitaMisura;
    this.unitaMisura = unitaMisura;
  }

  public Integer getVersion() {
    return version;
  }

  public void setVersion(Integer version) {
    Integer oldVersion = this.version;
    this.version = version;
  }

  public Certificato getCertificato() {
    return certificato;
  }

  public void setCertificato(Certificato certificato) {
    Certificato oldCertificato = this.certificato;
    this.certificato = certificato;
  }

  @Override
  public int hashCode() {
    int hash = 0;
    hash += (id != null ? id.hashCode() : 0);
    return hash;
  }

  @Override
  public boolean equals(Object object) {
    // TODO: Warning - this method won't work in the case the id fields are not set
    if (!(object instanceof Materiale)) {
      return false;
    }
    Materiale other = (Materiale) object;
    if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
      return false;
    }
    return true;
  }

  @Override
  public String toString() {
    return "com.alessandrodonato.elledia.certificati.gui.Materiale[ id=" + id + " ]";
  }

}

我在使用 TableViewcontrol 时遇到了一些问题:

  • 好的,我已经阅读了有关如何将 POJO 绑定到 TableView 的各种帖子。
  • 好的,我必须定义一个 ObservableList 并将其绑定到 TableView 以填充和更新它。
  • 但是要定义它,我必须在我的 POJO 属性中使用 SimpleStringProperty 而不是 String ,并且注释不适用于此...

任何想法?

4

3 回答 3

1

TiwulFX提供了JavaFX专门设计用于处理java POJO对象的自定义组件。

于 2013-04-07T22:02:47.727 回答
1

在不改变我的 POJO 的情况下为我工作。

TableColumn coluna1 = new TableColumn("Nome");
TableColumn coluna2 = new TableColumn("Álbum");
TableColumn coluna3 = new TableColumn("Imagem");
TableColumn coluna4 = new TableColumn("Descrição");
TableColumn coluna5 = new TableColumn("Tags");

coluna1.setCellValueFactory(
    new PropertyValueFactory<>("nome")
);
coluna2.setCellValueFactory(
    new PropertyValueFactory<>("album")
);

...

tabelaItens.getColumns().addAll(coluna1, coluna2, coluna3, coluna4, coluna5);

tabelaItens.setItems(FXCollections.observableArrayList(itens));

POJO:

@Entity
public class Item implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @ManyToOne
    private Album album;

    @Column(name = "nome")
    private String nome;

    @Temporal(javax.persistence.TemporalType.TIMESTAMP)
    @Column(name = "data_criacao")
    private Calendar dataCriacao;

    @Column(name = "data_imagem")
    @Temporal(javax.persistence.TemporalType.TIMESTAMP)
    private Calendar dataImagem;

    @Lob
    @Basic(fetch = FetchType.LAZY)
    @Column(name = "imagem")
    private byte[] imagem;

    @Column(name = "tipo_imagem")
    private String tipoImagem;

    @Column(name = "descricao")
    private String descricao;

    @Column(name = "tags")
    private String tags;

    ...
}
于 2016-12-30T16:41:32.120 回答
-1
public class MaterialeProperty {
    private Materiale materiale;

    public MaterialeProperty (Materiale materiale) {

        this.materiale= materiale;

        this.setId(materiale.getId());

    }

    private LongProperty id = new SimpleLongProperty() {

        public void set(long l) {
            super.set(l);
            materiale.setId(l);
        }
    };

    public final Long getId() {
        return id.get();
    }

    public final void setId(Long value) {
        id.set(value);
    }

    public LongProperty idProperty() {
        return id;
    }

    ....

}
于 2013-04-10T09:31:13.727 回答