Checkbox TableView中的JavaFX三态复选框

Checkbox TableView中的JavaFX三态复选框,checkbox,javafx,tableview,Checkbox,Javafx,Tableview,我想用bean属性在TableView中绑定一个三态复选框,我有一个近似值,但只在属性更改时反映复选框中的更改,但我不知道在复选框更改时如何反映属性中的更改。 我在谷歌上搜索了一下,但没有找到我的答案 public enum Attending {FALSE, TRUE, UNKNOWN} colEp.setCellFactory(new Callback<TableColumn<VentanaExtended, Attending>, TableCell<

我想用bean属性在TableView中绑定一个三态复选框,我有一个近似值,但只在属性更改时反映复选框中的更改,但我不知道在复选框更改时如何反映属性中的更改。 我在谷歌上搜索了一下,但没有找到我的答案

    public enum Attending {FALSE, TRUE, UNKNOWN}
    colEp.setCellFactory(new Callback<TableColumn<VentanaExtended, Attending>, TableCell<VentanaExtended, Attending>>() {

        @Override
        public TableCell<VentanaExtended, Attending> call(TableColumn<VentanaExtended, Attending> column) {
            return new TableCell<VentanaExtended, Attending>() {
                final CheckBox checkBox = new CheckBox() {
                    {
                        setAllowIndeterminate(true);
                    }

                };

                @Override
                public void updateItem(Attending item, boolean empty) {
                    super.updateItem(item, empty);
                    if (empty) {
                        setGraphic(null);
                    } else {                            
                        switch (item) {
                            case TRUE:
                                checkBox.setSelected(true);
                                break;
                            case FALSE:
                                checkBox.setSelected(false);
                                break;
                            case UNKNOWN:
                                checkBox.setIndeterminate(true);
                                break;
                        }
                        setGraphic(checkBox);
                    }
                }
            ;
        }
    ;
    }
    });
公共枚举参与{FALSE,TRUE,UNKNOWN}
colEp.setCellFactory(新回调(){
@凌驾
公共TableCell调用(TableColumn列){
返回新的TableCell(){
最终复选框=新复选框(){
{
setAllowIndeterminate(真);
}
};
@凌驾
public void updateItem(参与项,布尔值为空){
super.updateItem(项,空);
if(空){
设置图形(空);
}否则{
开关(项目){
大小写正确:
复选框.setSelected(true);
打破
案例错误:
复选框.setSelected(false);
打破
案件未知:
复选框.setUndeterminate(true);
打破
}
设置图形(复选框);
}
}
;
}
;
}
});

到目前为止,这是我最好的方法,也许有更好的方法,但就目前而言,这对我来说很有效

final CheckBox checkBox = new CheckBox() {
                {
                    setAllowIndeterminate(true);

                    indeterminateProperty().addListener((obs, oldValue, newValue) -> {
                             ((VentanaExtended) getTableRow().getItem()).epProperty().set(Attending.UNKNOWN);
                    });

                    selectedProperty().addListener((obs, oldValue, newValue) -> {
                             ((VentanaExtended) getTableRow().getItem()).epProperty().set(Attending.FALSE);
                    });
                }

            };
我必须添加setUndefinite(false)

            @Override
            public void updateItem(Estados item, boolean empty) {
                super.updateItem(item, empty);
                if (empty) {
                    setGraphic(null);
                } else {
                    switch (item) {
                        case TRUE:
                            checkBox.setSelected(true);
                            checkBox.setIndeterminate(false);
                            break;
                        case FALSE:
                            checkBox.setSelected(false);
                            checkBox.setIndeterminate(false);
                            break;
                        case UNKNOWN:
                            checkBox.setIndeterminate(true);
                            break;
                    }
                    setGraphic(checkBox);
                }
            }