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
}
}
}
将 RowType
和 ColumnType
替换为 colLabel
使用的实际类型(即假设您有 TableColumn<RowType, ColumnType> colLabel ;
)。
如何根据 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
}
}
}
将 RowType
和 ColumnType
替换为 colLabel
使用的实际类型(即假设您有 TableColumn<RowType, ColumnType> colLabel ;
)。