0
我在這種情況下我在表格單元格中的DatePicker編輯狀態:JavaFX的:更改基於另一個細胞
我有一個表「訪問」有一系列的列。 表格是可編輯的,您可以通過按鈕添加更多空行。
其中一列取決於另一列。 主列有它自己的cellFactory來呈現組合框。 輔助列有其自己的cellFactory來創建日期選擇器。
現在,該表的二次電池只有在主塔的單元中,在不同的國家「一無所有」
一切正常,只是我需要點擊組合框的狀態的一個改變每當輔助小區在狀態變爲「無」時更新它。
爲了彌補,我在主列的setOnEditCommit中使用了table.refresh()函數。但是,如果您使用此功能並且單元處於「無」狀態,則所有輔助單元將變爲無效。
我該如何解決?
這是次級柱
public class DataEditingCellVisite extends TableCell<Visite, LocalDate> {
private DatePicker datePicker = new DatePicker(getDate());
private DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
public DataEditingCellVisite() {
datePicker.setDisable(true);
}
@Override
public void startEdit() {
if(!this.getTableView().getItems().get(this.getTableView().getSelectionModel().getSelectedIndex()).getStato().equals("")) {
datePicker.setDisable(false);
commitEdit(datePicker.getValue());
} else {
datePicker.setDisable(true);
setText(null);
commitEdit(null);
}
if (!isEmpty() && !datePicker.isDisable()) {
super.startEdit();
createDatePicker();
setText(null);
setGraphic(datePicker);
}
}
@Override
public void cancelEdit() {
super.cancelEdit();
if(getDate() != null)
setText(getDate().format(formatter));
setGraphic(null);
}
@Override
public void updateItem(LocalDate item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
if (isEditing()) {
if (datePicker != null) {
datePicker.setValue(getDate());
}
setText(null);
setGraphic(datePicker);
} else {
setGraphic(null);
if(datePicker.isDisable())
setText(null);
else
if(getDate() != null)
setText(getDate().format(formatter));
}
}
}
@Override
public void commitEdit(LocalDate value) {
super.commitEdit(value);
((Visite)this.getTableRow().getItem()).setDataParto(value);
}
private void createDatePicker() {
datePicker.setMinWidth(this.getWidth() - this.getGraphicTextGap() * 2);
datePicker.setOnAction((e) -> {
if(datePicker.getValue() != null)
commitEdit(datePicker.getValue());
});
datePicker.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
if (event.getCode() == KeyCode.ENTER || event.getCode() == KeyCode.TAB) {
if(datePicker.getValue() != null)
commitEdit(datePicker.getValue());
}
});
datePicker.focusedProperty().addListener(new ChangeListener<Boolean>(){
@Override
public void changed(ObservableValue<? extends Boolean> arg0, Boolean arg1, Boolean arg2) {
if(!arg2) {
if(datePicker.getValue() != null)
commitEdit(datePicker.getValue());
}
}
});
}
private LocalDate getDate() {
return getItem() == null ? null : getItem();
}
}