JavaFX为现有TableView添加CheckBox列后状态不同步如何解决
问题原因
你的Person模型类缺少BooleanProperty类型对应的属性访问器,CheckBoxTableCell需要和可观察的BooleanProperty实例做双向绑定,才能正常显示初始值、同步修改结果到模型。你目前只提供了getActive()和setActive()方法,PropertyValueFactory无法获取到可绑定的属性实例,导致绑定失效。
修复方案
你只需要在Person类中补充activeProperty()方法即可:
public static class Person { // 原有代码保持不变 // 新增以下方法 public BooleanProperty activeProperty() { return active; } }
优化建议(可选)
推荐你避免使用PropertyValueFactory,改用lambda写法设置单元格值工厂,编译期就能检查属性是否存在,不会因为方法名拼写错误等问题导致运行期绑定失效:
// 替换原来的active.setCellValueFactory(new PropertyValueFactory<>("active")); active.setCellValueFactory(cellData -> cellData.getValue().activeProperty());
修改后重新运行即可看到复选框默认处于勾选状态,点击复选框也会正常触发setActive()方法同步修改模型值。
内容的提问来源于stack exchange,提问作者trashgod
相关产品推荐
相关产品推荐

