我是 JavaFX 的新手,所以请多多包涵。我正在尝试有一个 TableView,其中一些列将是复选框。我的意图是将这些绑定到模型对象中的布尔属性。模型对象具有定义为 SimpleBooleanProperty 的属性,并具有 getter/setter 和 property 方法。我已经验证了表格“看到”了模型对象,因为我将一些布尔列绑定为表格中的文本,果然,表格按预期显示“真”或“假”。但是,我无法让复选框在任一方向绑定数据。我在下面包含了一些示例代码。
public class DataModel {
private SimpleBooleanProperty prop1;
private SimpleBooleanProperty prop2;
public boolean getProp1() {
return prop1.get();
}
public setProp1(boolean value) {
prop1.set(value);
}
public prop1() {
return prop1;
}
...
}
UI模型逻辑:
...
private ObjectProperty<ObservableList<DataModel>> listProperty;
...
List<DataModel> list = new ArrayList<DataModel>();
... add some DataModel objects to list
final ObservableList<DataModel> obsList = FXCollections.observableArrayList(list);
listProperty.set(obsList);
界面逻辑:
...
TableView table = new TableView<DataModel>();
table.setEditable(true);
TableColumn<DataModel, String> boolAsStringCol = new TableColumn<DataModel, String>("Prop1");
boolAsStringCol.setCellValueFactory(new PropertyValueFactory<DataModel, String>("prop1"));
TableColumn<DataModel, Boolean> boolAsCbxCol = new TableColumn<DataModel, Boolean>("Prop2");
boolAsCbxCol.setCellValueFactory(new PropertyValueFactory<DataModel, Boolean>("prop2"));
boolAsCbxCol.setCellFactory(CheckBoxTableCell.forTableColumn(boolAsCbxCol));
boolAsCbxCol.setEditable(true);
table.getColumns().add(boolAsStringCol);
table.getColumns().add(boolAsCbxCol);
...
我可以切换复选框,但它似乎没有将属性绑定到复选框。如果我设置了一个断点,那么当我选中或取消选中该复选框时,setter 不会被调用。此外,如果我在创建对象时将属性初始化为 true,则在呈现表时它不会显示为选中状态。
欢迎任何建议。看起来这应该有效,但事实并非如此。
谢谢。