2013-05-04 15 views
6

Próbuję zrobić stolik z Tableview i wypełnić go programowo na podstawie listy User obiektów. User ma trzy zmienne, nameProperty (String), rankProperty (Enum zwana pozycja) i netMeritsProperty (int). Wszystkie są przechowywane w obiektach SimpleStringProperty. Moim problemem jest to, że dane te nie pojawią się w aktualnej tabeli, jak pokazano poniżej:Jak poprawnie używać właściwości PropertyValueFactory?

Oto mój kod na stole. Czego nie rozumiem?

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

A to docs nie pomóc? http://docs.oracle.com/javafx/2/ui_controls/table-view.htm –

+1

Być może nie trzeba dodać „obiekt” w końcu „nameProperty”, itp? –

+0

Lub nie wypełniłeś TableView danymi –

Odpowiedz

14

Odpowiedź jest o uwagi, które treści ciąg dajesz jako parametr PropertyValueFactory i jakie metody są realizowane w kapsułkach typu danych.

Tworzenie instancji:

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

będzie odnośnika do:

User.nameProperty() 
+0

Alexander Czytałem o tym gdzieś Ale nie mogę znaleźć linku. Czy masz link z tego, gdzie to czytasz? ponieważ był kompletny przewodnik, jak działa nieruchomość. Jeśli kompilator znalazł nazwęPeropty(), to wywoła to do innego wywołania funkcji getName(); – UnKnown

11

Korzystanie PropertyValueFactory jest proste, ale nie jest niezawodny.

Prawdopodobnie jednym z najbardziej kłopotliwa rzecz do używania PropertyValueFactory jest, że argument podać należy dopasować nazwę właściwości JavaFX Bean według ścisłej konwencji:

  1. Nie musi zawierać słowo „własność”
  2. dopasowanie jest wielkość liter, tak, że „IMIĘ” nie zostanie rozpoznany jako „Imię”

najlepszym sposobem jest przyjrzenie się swoim bloku definicji JavaFX Bean i znaleźć linię właściwości. Weź nazwę właściwości, należy pominąć tę część, która jest „własność”, a następnie skopiować go dokładnie (w tej samej sprawie) do łańcucha, które przechodzą do PropertyValueFactory.

Załóżmy, że masz tę definicję JavaFX Fasola:

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; } 

Spójrz na nazwę właściwości w ostatnim wierszu „firstNameProperty”. Pominięcie „mienie”, a otrzymany ciąg jest co należy użyć jako argumentu -exactly- ciąg do PropertyValueFactory, np. "Imię".

tcolMyTableCol.setCellValueFactory(new PropertyValueFactory("firstName")); 
Powiązane problemy