如何为JavaFX TableColumn设置CellValueFactory以访问完整Person对象
解决方案
直接配置CellValueFactory传入完整Person对象
在你标注需要补充代码的位置添加如下代码即可,直接返回当前行对应的Person实例:
colContact.setCellValueFactory(cellData -> new SimpleObjectProperty<>(cellData.getValue()));
如果IDE提示找不到SimpleObjectProperty,导入对应包即可:
import javafx.beans.property.SimpleObjectProperty;
配置完成后你已经写好的自定义单元格逻辑不需要做任何修改就可以正常运行,updateItem方法可以直接拿到完整的Person对象,访问任意属性实现复杂的展示逻辑。
可选优化:支持属性自动更新
你当前的实现是直接读取静态值,如果运行过程中Person的emailAddress或phoneNumber属性发生变动,单元格不会自动刷新内容,要支持自动更新可以修改自定义单元格的updateItem逻辑,绑定属性监听即可:
@Override protected void updateItem(Person person, boolean empty) { super.updateItem(person, empty); // 先解绑之前的属性,避免内存泄漏和脏数据 lblEmailAddress.textProperty().unbind(); lblPhoneNumber.textProperty().unbind(); if (person != null && !empty) { // 绑定属性,属性变动时自动更新标签内容 lblEmailAddress.textProperty().bind(person.emailAddressProperty()); lblPhoneNumber.textProperty().bind(person.phoneNumberProperty()); setGraphic(root); } else { setGraphic(null); } }
内容的提问来源于stack exchange,提问作者Zephyr
相关产品推荐
相关产品推荐

