如何使用这个类的一个例子是:
TreeTableColumn firstNameCol = new TreeTableColumn("First Name"); firstNameCol.setCellValueFactory(new TreeItemPropertyValueFactory("firstName"));
在这个例子中, Person是类类型的的TreeItem个在所使用的实例TreeTableView 。 Person类必须被声明为public。 TreeItemPropertyValueFactory使用构造函数参数"firstName"假设Person具有公共方法firstNameProperty ,没有形式参数,返回类型为ObservableValue 。
如果存在这种方法,那么它将被调用,并且另外假设返回一个Property的实例。 此外, TreeTableView增加观察者的返回值,使得烧制的任何变化将通过观察TreeTableView ,导致细胞立即更新。
如果不存在这样的方法,则TreeItemPropertyValueFactory假设Person具有公共方法getFirstName或isFirstName ,没有形式参数,返回类型为String 。 如果存在这样的方法,那么它将被调用,并且它的返回值被包装在一个ReadOnlyObjectWrapper中并返回到TreeTableCell 。 在这种情况下, TreeTableCell将无法观察到财产的变化,与上述第一种方法不同。
为了参考(并且在TreeTableColumn cell value factory文档中指出),上面代码的长形式将是以下内容:
TreeTableColumn firstNameCol = new TreeTableColumn("First Name"); firstNameCol.setCellValueFactory(new Callback, ObservableValue>() { public ObservableValue call(CellDataFeatures p) { // p.getValue() returns the TreeItem instance for a particular // TreeTableView row, and the second getValue() call returns the // Person instance contained within the TreeItem. return p.getValue().getValue().firstNameProperty(); } }); }
将应用程序部署为模块
如果引用的类在一个命名的模块中,那么javafx.base模块必须能反映javafx.base 。 如果模块opens包含至少包含javafx.base模块,则类可以反射访问。
例如,如果Person类在foo.app模块中的com.foo包中,则module-info.java可能如下所示:
module foo.app { opens com.foo to javafx.base; }
或者,如果模块exports无条件地包含包,则可以反射地访问类。