- java.lang.Object
-
- javafx.scene.control.cell.PropertyValueFactory<S,T>
-
- Type Parameters:
S
- The type of the class contained within the TableView.items list.T
- The type of the class contained within the TableColumn cells.
- All Implemented Interfaces:
Callback<TableColumn.CellDataFeatures<S,T>,ObservableValue<T>>
public class PropertyValueFactory<S,T> extends Object implements Callback<TableColumn.CellDataFeatures<S,T>,ObservableValue<T>>
A convenience implementation of the Callback interface, designed specifically for use within theTableColumn
cell value factory
. An example of how to use this class is:TableColumn<Person,String> firstNameCol = new TableColumn<Person,String>("First Name"); firstNameCol.setCellValueFactory(new PropertyValueFactory<Person,String>("firstName"));
In this example,
Person
is the class type of theTableView
items
list. The classPerson
must be declared public.PropertyValueFactory
uses the constructor argument,"firstName"
, to assume thatPerson
has a public methodfirstNameProperty
with no formal parameters and a return type ofObservableValue<String>
.If such a method exists, then it is invoked, and additionally assumed to return an instance of
Property<String>
. The return value is used to populate theTableCell
. In addition, theTableView
adds an observer to the return value, such that any changes fired will be observed by theTableView
, resulting in the cell immediately updating.If no such method exists, then
PropertyValueFactory
assumes thatPerson
has a public methodgetFirstName
orisFirstName
with no formal parameters and a return type ofString
. If such a method exists, then it is invoked, and its return value is wrapped in aReadOnlyObjectWrapper
and returned to theTableCell
. In this situation, theTableCell
will not be able to observe changes to the property, unlike in the first approach above.For reference (and as noted in the TableColumn
TableColumn.cellValueFactoryProperty()
cell value factory} documentation), the long form of the code above would be the following: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(); } }); }
Deploying an Application as a Module
If the referenced class is in a named module, then it must be reflectively accessible to the
javafx.base
module. A class is reflectively accessible if the moduleopens
the containing package to at least thejavafx.base
module. Otherwise thecall(TableColumn.CellDataFeatures)
method will log a warning and returnnull
.For example, if the
Person
class is in thecom.foo
package in thefoo.app
module, themodule-info.java
might look like this:module foo.app { opens com.foo to javafx.base; }
Alternatively, a class is reflectively accessible if the module
exports
the containing package unconditionally.- Since:
- JavaFX 2.0
- See Also:
TableColumn
,TableView
,TableCell
,TreeItemPropertyValueFactory
,MapValueFactory
-
-
Constructor Summary
Constructors Constructor Description PropertyValueFactory(String property)
Creates a default PropertyValueFactory to extract the value from a given TableView row item reflectively, using the given property name.
-
Method Summary
Modifier and Type Method Description ObservableValue<T>
call(TableColumn.CellDataFeatures<S,T> param)
Thecall
method is called when required, and is given a single argument of type P, with a requirement that an object of type R is returned.String
getProperty()
Returns the property name provided in the constructor.
-
-
-
Constructor Detail
-
PropertyValueFactory
public PropertyValueFactory(String property)
Creates a default PropertyValueFactory to extract the value from a given TableView row item reflectively, using the given property name.- Parameters:
property
- The name of the property with which to attempt to reflectively extract a corresponding value for in a given object.
-
-
Method Detail
-
call
public ObservableValue<T> call(TableColumn.CellDataFeatures<S,T> param)
Thecall
method is called when required, and is given a single argument of type P, with a requirement that an object of type R is returned.
-
getProperty
public final String getProperty()
Returns the property name provided in the constructor.- Returns:
- the property name provided in the constructor
-
-