如何根据JavaFX中tableView的同一列中另一个单元格的状态更改单元格的外观。
colHidden.setCellValueFactory(param -> {
return param.getValue().hiddenProperty();
});
colHidden.setCellFactory(tc -> new CheckBoxTableCell<>());
colLabel.setCellFactory(...);
我有一个包含CheckBoxTableCell<>()
的单元格。当我选中此复选框时,单元格colLabel
的内容应替换为星号。
答案 0 :(得分:0)
你可以这样做。这里的基本思想是“记住”对应于同一行中复选框的属性,假设单元格不为空,并为其添加一个更新文本的侦听器。每当单元格更新时,从上一个属性中删除侦听器。
<property>
<name>dfs.datanode.du.reserved</name>
<value>3221225472</value>
<description>3GB of disk space reserved for non DFS usage.
This space will be left unconsumed by the Datanode.
</description>
</property>
将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
)。