2013-05-04 21 views
6

Sto cercando di creare una tabella con un TableView e riempirlo a livello di codice in base a un elenco di oggetti User. Lo User ha tre variabili, nameProperty (String), rankProperty (Enum chiamato Rank) e netMeritsProperty (int). Questi sono tutti memorizzati negli oggetti SimpleStringProperty. Il mio problema è che i dati non verranno visualizzate nella tabella effettiva, come illustrato di seguito:Come utilizzare PropertyValueFactory correttamente?

Ecco il mio codice per la tabella. Cosa non sto comprendendo?

TableColumn<User, String> name = new TableColumn<>("Name"); 
name.setCellValueFactory(new PropertyValueFactory<User, String>("nameProperty")); 

TableColumn<User, String> rank = new TableColumn<>("Rank"); 
rank.setCellValueFactory(new PropertyValueFactory<User, String>("rankProperty")); 

TableColumn<User, String> netMerits = new TableColumn<>("Net Merits"); 
netMerits.setCellValueFactory(new PropertyValueFactory<User, String>("netMeritsProperty")); 

userTable.getColumns().addAll(name, rank, netMerits); 
+0

E questo documento non ti aiuta? http://docs.oracle.com/javafx/2/ui_controls/table-view.htm –

+1

Forse non è necessario aggiungere "Proprietà" alla fine di "nameProperty", ecc.? –

+0

Oppure non hai riempito TableView con un dato –

risposta

14

La risposta è di circa l'attenzione che il contenuto della stringa si dà come parametro di PropertyValueFactory, e quali metodi sono implementati nel vostro tipo di dati incapsulati.

la creazione di istanze:

new PropertyValueFactory<User, String>("name") 

si ricerca per:

User.nameProperty() 
+0

Alexander Ho letto di questo da qualche parte ma non riesco a trovare il link. Hai link da dove leggi questo? perché c'era una guida completa su come funziona la proprietà. Se il compilatore ha trovato namePeropty() allora chiamerà a questo altrimenti chiamerà a getName(); – UnKnown

11

Utilizzando PropertyValueFactory è semplice, ma non è infallibile.

Probabilmente la cosa più fastidiosa di utilizzare PropertyValueFactory è che l'argomento fornito deve corrispondere al nome della vostra proprietà JavaFX Bean secondo una convenzione OGGETTIVA:

  1. non si deve includere la parola "proprietà"
  2. L'abbinamento è tra maiuscole e minuscole, in modo che "fIRSTNAME" non sarà riconosciuto come "firstName"

Il modo migliore è quello di guardare il tuo blocco di definizione JavaFX Bean, e trova il tuo linea di proprietà. Prendi il nome della proprietà, ometti la parte che è "proprietà" e copiala esattamente (nello stesso caso) nella stringa che passi a PropertyValueFactory.

Per esempio, supponiamo di avere questa definizione JavaFX Bean:

public final String getFirstName() { return this.m_firstname.get(); } 
public final void setFirstName(String v) { this.m_firstname.set(v); } 
public final StringProperty firstNameProperty() { return m_firstname; } 

Osservare il nome della proprietà nell'ultima riga, "firstNameProperty". Ometti "Proprietà", e la stringa risultante è ciò che devi usare -esattamente- come argomento String su PropertyValueFactory, es. "nome di battesimo".

tcolMyTableCol.setCellValueFactory(new PropertyValueFactory("firstName")); 
Problemi correlati