Класс PropertyValueFactory<S,T>
- Type Parameters:
-
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 есть публичный метод firstNameProperty без формальных параметров и возвращающим типом ObservableValue<String>.
Если такой метод существует, он вызывается и, дополнительно, предполагается, что он возвращает экземпляр Property<String>. Возвращаемое значение используется для заполнения TableCell. Кроме того, TableView добавляет наблюдателя к возвращаемому значению, так что любые сгенерированные изменения будут наблюдаться TableView, что приведет к немедленному обновлению ячейки.
Если такого метода не существует, то PropertyValueFactory предполагает, что у Person есть публичный метод getFirstName или isFirstName без формальных параметров и возвращающим типом String. Если такой метод существует, он вызывается, а его возвращаемое значение упаковывается в ReadOnlyObjectWrapper и возвращается в TableCell. В этом случае TableCell не сможет наблюдать за изменениями свойства, в отличие от первого подхода выше.
Для справки (как отмечено в документации TableColumn TableColumn.cellValueFactoryProperty() cell value factory) длинная форма кода выше будет следующей:
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 содержащий пакет безусловно.
- Since:
- JavaFX 2.0
- См. также:
-
TableColumn,TableView,TableCell,TreeItemPropertyValueFactory,MapValueFactory
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
PropertyValueFactory(String property) | Создает стандартный PropertyValueFactory для извлечения значения из заданной строки элемента TableView рефлексивно, используя заданное имя свойства. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
String | getProperty() | Возвращает имя свойства, предоставленное в конструкторе. |
Подробное описание конструкторов
PropertyValueFactory
public PropertyValueFactory(String property)
- Параметры:
-
property- Имя свойства, с помощью которого пытаться рефлексивно извлечь соответствующее значение в заданном объекте.
Подробное описание методов
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.