【问题标题】:CheckBoxTableCell just show unchecked boxCheckBoxTableCell 只显示未选中的框
【发布时间】:2015-01-13 14:38:59
【问题描述】:

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

【问题讨论】:

    标签: java javafx tablecell tablecolumn


    【解决方案1】:

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

    【讨论】:

    • 是的,我认为它会更复杂,我只是想知道覆盖 updateItems() 方法
    【解决方案2】:

    我会使用以下方法:

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

    【讨论】:

      猜你喜欢
      • 2018-04-06
      • 2014-08-10
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多