您提到的教程使用PropertyValueFactory。这在这里不适用,因为它只对给定类进行内省,但如果您查看该类的文档,它包括以下长格式:
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();
}
});
}
因此,您可以对数据类使用相同的概念来从数据对象的用户对象中检索适当的字段:
firstNameCol.setCellValueFactory(new Callback<CellDataFeatures<Data, String>, ObservableValue<String>>() {
public ObservableValue<String> call(CellDataFeatures<Data, String> data) {
// data.getValue() returns the Data instance for a particular TableView row
return data.getValue().getUser().firstNameProperty();
}
});
}
如果您使用 Java 8 lambda,则可以消除一些丑陋。
如果您的用户对象没有值的属性访问器,而只有 getter,您可以将结果包装在 ReadOnlyObjectWrapper 中,如 PropertyValueFactory 文档中所述:
return new ReadOnlyObjectWrapper(data.getValue().getUser().getFirstName());
如果您的表格不可编辑并且您不希望表格数据自动更改,这很好。如果基础字段更改,则首选基于属性访问器的方法。