CheckBoxTableCell只显示未选中的框

时间:2014-11-16 17:30:08

标签: java javafx tablecell tablecolumn

我尝试将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
因为我的所有模型类仍然使用标准类型而不是属性
有没有办法做到这一点?
如果不是,也许我只是将我的模型类变量更改为属性变量

2 个答案:

答案 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和状态值同步。