I have a TableView
with an editable TextFieldTableCell
that I want to restrict to be available based on a BooleanProperty
of my model object.
For example, textField.disableProperty().bind(item.editableProperty().not())
Currently, I have the basic implementation from the Oracle docs:
colComment.setCellFactory(TextFieldTableCell.forTableColumn());
colComment.setOnEditCommit(event -> event.getTableView().getItems().get(
event.getTablePosition().getRow()).setComment(
event.getNewValue())
);
This obviously does not allow much flexibility. The desire is to check the item's editableProperty
and if it is true
, display the TextFieldTableCell
and bind it to the item's commentProperty
.
If that property is false
, the cell should simply display the value of the commentProperty
.
I have not worked with editable TableViews in the past so I am a bit lost.
I have tried to hack out a workaround with manually setting the graphic myself, but that just does nothing with the cell:
colComment.setCellFactory(cell -> new TableCell<LogEntry, String>() {
final TextField txtComment = new TextField();
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setGraphic(null);
} else {
LogEntry logEntry = (LogEntry) getTableRow().getItem();
if (logEntry.isEditable()) {
txtComment.textProperty().bindBidirectional(logEntry.commentProperty());
setGraphic(txtComment);
} else {
setText(item);
}
}
}
});
question from:
https://stackoverflow.com/questions/65947317/how-to-make-textfieldtablecell-conditional-on-model-property 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…