Вы можете сделать что-то вроде этого. Основная идея здесь состоит в том, чтобы «запомнить» свойство, соответствующее флажку в той же строке, предполагая, что ячейка не пуста, и добавить в нее прослушиватель, который обновляет текст. Затем удаляйте прослушиватель из предыдущего свойства при каждом обновлении ячейки.
colLabel.setCellFactory(col -> new TableCell<RowType, ColumnType>() {
private ObservableValue<Boolean> hiddenProperty ;
ChangeListener<Boolean> listener = (obs, wasHidden, isNowHidden) -> updateText(isNowHidden);
@Override
protected void updateItem(ColumnType item, boolean empty) {
super.updateItem(item, empty);
if (hiddenProperty != null) {
hiddenProperty.removeListener(listener);
}
if (empty) {
setText(null);
hiddenProperty = null ;
} else {
hiddenProperty = getTableView().getItems().get(getIndex()).hiddenProperty();
hiddenProperty.addListener(listener);
updateText(hiddenProperty.get());
}
}
private void updateText(boolean hidden) {
if (hidden) {
setText("********");
} else {
setText(getItem().toString()); // or other format for string, etc
}
}
}
Замените RowType
и ColumnType
фактическими типами, используемыми colLabel
(то есть предполагается, что у вас есть TableColumn<RowType, ColumnType> colLabel ;
).