Как правильно использовать PropertyValueFactory?
Я пытаюсь сделать таблицу с TableView и заполнить ее программно на основе списка User
объекты. The User
есть три переменные, nameProperty
(строка), rankProperty
(перечисление называется ранг), и netMeritsProperty
(int). Все они хранятся в SimpleStringProperty
объекты. Моя проблема в том, что данные не будут отображаться в фактической таблице, как показано здесь:
вот мой код для таблицы. Чего я не понимаю?
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);
2 ответов
ответ о внимании, которое строковое содержимое вы даете в качестве параметра PropertyValueFactory
, и какие методы реализованы в вашем инкапсулированном типе данных.
инстанцирование :
new PropertyValueFactory<User, String>("name")
будет поиска :
User.nameProperty()
использование PropertyValueFactory просто,но это не является надежным.
вероятно, самая неприятная вещь для использования PropertyValueFactory заключается в том, что аргумент, который вы предоставляете, должен соответствовать имени вашего свойства JavaFX Bean в соответствии со строгим соглашением:
- вы не должны включать слово "собственность"
- сопоставление чувствительно к регистру, так что" FIRSTNAME "не будет распознан как"firstName"
самый лучший путь посмотрите на свой блок определения JavaFX Bean и найдите свою строку свойств. Возьмите имя свойства, опустите часть ,которая является "свойством", и скопируйте ее точно (в том же случае) в строку, которую вы передаете PropertyValueFactory.
например, скажем, у вас есть это определение 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; }
посмотрите на имя свойства в последней строке "firstNameProperty". Опустите "свойство", и полученная строка-это то, что вы должны использовать-точно - в качестве аргумента строки в PropertyValueFactory, например. "свойства FirstName."
tcolMyTableCol.setCellValueFactory(new PropertyValueFactory("firstName"));