我尝试将CheckBoxTableCell添加到我的TableColumn,但是单元格只显示未选中的框,无论值是true还是false
我的对象
public class Room {
private String id,type,category,floor,number;
private Boolean status;
//setter and getter
........
}
我如何声明表格
@FXML
private TableView<Room> roomTable;
@FXML
private TableColumn ....
@FXML
private TableColumn<Room,Boolean> statusColumn;
public void initialize(){
....
statusColumn.setCellValueFactory(new PropertyValueFactory<Room, Boolean>("status")); // here
statusColumn.setCellFactory(CheckBoxTableCell.forTableColumn(statusColumn));
....
}
我通过使用BooleanProperty类型创建一个新变量并使用新变量更改PropertyValueFactory参数来解决此问题
问题是我不想使用BooleanProperty或Property
因为我的所有模型类仍然使用标准类型而不是属性
有没有办法做到这一点?
如果不是,也许我只是将我的模型类变量更改为属性变量
答案 0 :(得分:0)
要使单元格与属性保持同步,需要在属性值更改时通知单元格。这是JavaFX属性类提供的功能。有一些方法可以绑定到传统的Java Bean属性,但它们涉及更多的“连接”,并且最终会比使用JavaFX属性类更复杂。 This question类似。
答案 1 :(得分:0)
我会使用以下方法做到这一点:
statusColumn.setCellValueFactory(new Callback<CellDataFeatures<Room, Boolean>, ObservableValue<Boolean>>() {
@Override
public ObservableValue<Boolean> call(CellDataFeatures<Room, Boolean> room) {
return new ReadOnlyBooleanWrapper(room.getValue().getStatus());
}
});
statusColumn.setCellFactory(CheckBoxTableCell.forTableColumn(statusColumn));
现在,如果您的复选框不可编辑,这样可以正常工作。否则,您必须使用Java Bean属性来保持checkBox和状态值同步。