0

我尝试将 CheckBoxTableCell 添加到我的 TableColumn 但单元格只显示未选中的框,无论值是真还是假

我的对象

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
因为我的所有模型类仍然使用标准类型而不是 Property
存在有办法吗?
如果不是,也许我只是将我所有的模型类变量更改为属性变量

4

2 回答 2

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 Beans 属性来保持复选框和状态值同步。

于 2014-11-18T16:32:42.290 回答
0

为了使单元格与属性保持同步,需要在属性值更改时通知单元格。这是 JavaFX 属性类提供的功能。有一些方法可以绑定到经典的 Java Bean 属性,但它们涉及更多的“接线”,并且最终会比使用 JavaFX 属性类更复杂。这个问题类似。

于 2014-11-16T17:36:22.323 回答