我想在一个带有bean属性的TableView中绑定一个三态CheckBox,我有一个近似值但只反映了属性更改时复选框中的更改,但我不知道如何反映属性中的更改复选框已更改。 我看了谷歌,但我找不到答案。
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);
}
}
;
}
;
}
});
答案 0 :(得分:0)
到目前为止,这是我最好的方法,也许有更好的方法,但就目前而言,这对我有用。
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);
});
}
};
我不得不添加setIndeterminate(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);
}
}