Как правильно использовать 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 в соответствии со строгим соглашением:

  1. вы не должны включать слово "собственность"
  2. сопоставление чувствительно к регистру, так что" 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"));