Класс PropertyValueFactory<S, T>
- Параметры типа:
-
S- Тип класса, содержащегося в списке TableView.items. -
T- Тип класса, содержащегося в ячейках TableColumn.
- Все реализованные интерфейсы:
Callback<TableColumn.CellDataFeatures<S,T>, ObservableValue<T>>
public class PropertyValueFactory<S,T> extends Object implements Callback<TableColumn.CellDataFeatures<S,T>,ObservableValue<T>>
TableColumn cell value factory. Пример использования этого класса:
TableColumn<Person,String> firstNameCol = new TableColumn<Person,String>("First Name");
firstNameCol.setCellValueFactory(new PropertyValueFactory<Person,String>("firstName"));
В этом примере, Person - тип класса элементов списка TableView items. Класс Person должен быть объявлен public. PropertyValueFactory использует аргумент конструктора, "firstName", для предположения, что Person имеет public метод firstNameProperty без формальных параметров и возвращающим типом ObservableValue<String>.
Если такой метод существует, то он вызывается, и дополнительно предполагается, что он возвращает экземпляр Property<String>. Возвращаемое значение используется для заполнения TableCell. Кроме того, TableView добавляет наблюдателя к возвращаемому значению, таким образом, любые сгенерированные изменения будут наблюдаться TableView, что приведет к немедленному обновлению ячейки.
Если такого метода не существует, то PropertyValueFactory предполагает, что Person имеет public метод getFirstName или isFirstName без формальных параметров и возвращающим типом String. Если такой метод существует, то он вызывается, а его возвращаемое значение оборачивается в ReadOnlyObjectWrapper и возвращается в TableCell. В этом случае TableCell не сможет наблюдать за изменениями свойства, в отличие от первого подхода выше.
Для справки (и как отмечено в документации TableColumn TableColumn.cellValueFactoryProperty() фабрики создания значений ячеек), подробный код выше будет следующим:
TableColumn<Person,String> firstNameCol = new TableColumn<Person,String>("First Name");
firstNameCol.setCellValueFactory(new Callback<CellDataFeatures<Person, String>, ObservableValue<String>>() {
public ObservableValue<String> call(CellDataFeatures<Person, String> p) {
// p.getValue() returns the Person instance for a particular TableView row
return p.getValue().firstNameProperty();
}
});
}
Развёртывание приложения как модуля
Если указанный класс находится в именованном модуле, то он должен быть рефлективно доступен модулю javafx.base. Класс рефлективно доступен, если модуль opens содержащий пакет по крайней мере для модуля javafx.base. В противном случае метод call(TableColumn.CellDataFeatures) выведет предупреждение и вернёт null.
Например, если класс Person находится в пакете com.foo в модуле foo.app, то module-info.java может выглядеть так:
module foo.app {
opens com.foo to javafx.base;
} Или, класс рефлективно доступен, если модуль exports содержащий пакет безусловно.
- С момента:
- JavaFX 2.0
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
PropertyValueFactory |
Создаёт фабрику PropertyValue для извлечения значения из строки элемента TableView рефлективно, используя указанное имя свойства. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
ObservableValue |
call |
Метод call вызывается по мере необходимости и получает единственный аргумент типа P с требованием вернуть объект типа R. |
final String |
getProperty() |
Возвращает имя свойства, предоставленное в конструкторе. |
Подробное описание конструкторов
PropertyValueFactory
public PropertyValueFactory(String property)
- Параметры:
-
property- Имя свойства, с помощью которого пытаться рефлективно извлечь соответствующее значение в заданном объекте.
Подробное описание методов
call
public ObservableValue<T> call(TableColumn.CellDataFeatures<S,T> param)
call вызывается по мере необходимости и получает единственный аргумент типа P с требованием вернуть объект типа R.getProperty
public final String getProperty()
- Возвращает:
- имя свойства, предоставленное в конструкторе
© 2008, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from JavaFX API Documentation.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Java, JavaFX and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.