Checkbox TableView中的JavaFX三态复选框
我想用bean属性在TableView中绑定一个三态复选框,我有一个近似值,但只在属性更改时反映复选框中的更改,但我不知道在复选框更改时如何反映属性中的更改。 我在谷歌上搜索了一下,但没有找到我的答案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<
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);
}
}