JavaFX 中单元格的单元格依赖外观

Cell dependent appearance of cell in JavaFX

如何根据 JavaFX 中 tableView 同一列中另一个单元格的状态更改单元格的外观。

colHidden.setCellValueFactory(param -> {
        return param.getValue().hiddenProperty();
    });

colHidden.setCellFactory(tc -> new CheckBoxTableCell<>());
    colLabel.setCellFactory(...);

我有一个包含 CheckBoxTableCell<>() 的单元格。当我 select 此复选框时,单元格的内容 colLabel 应替换为星号。

你可以这样做。这里的基本思路是,假设单元格不为空,将 "remember" 对应于同一行复选框的 属性,并为其添加一个更新文本的侦听器。然后每当单元格更新时,从以前的 属性 中删除侦听器。

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
        }
    }
}

RowTypeColumnType 替换为 colLabel 使用的实际类型(即假设您有 TableColumn<RowType, ColumnType> colLabel ;)。