JavaFx实现对TableView<Map<String, Object>>的单元格值标红
时间: 2023-11-11 15:14:32 浏览: 58
要实现对TableView<Map<String, Object>>的单元格值标红,需要使用JavaFX的回调函数Callback和单元格工厂类Callback.
以下是一个示例:
```
Callback<TableColumn<Map<String, Object>, String>, TableCell<Map<String, Object>, String>> cellFactory = new Callback<TableColumn<Map<String, Object>, String>, TableCell<Map<String, Object>, String>>() {
@Override
public TableCell<Map<String, Object>, String> call(TableColumn<Map<String, Object>, String> param) {
return new TableCell<Map<String, Object>, String>() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
setText(empty ? "" : getItem().toString());
setGraphic(null);
TableRow<Map<String, Object>> currentRow = getTableRow();
if (currentRow != null && !isEmpty()) {
Map<String, Object> rowData = currentRow.getItem();
if (rowData != null && rowData.containsKey(param.getText())) {
Object value = rowData.get(param.getText());
if (value != null && value.toString().equals("需要标红的值")) {
setTextFill(Color.RED);
} else {
setTextFill(Color.BLACK);
}
}
}
}
};
}
};
TableColumn<Map<String, Object>, String> col = new TableColumn<>("列名");
col.setCellValueFactory(new MapValueFactory<>("列名"));
col.setCellFactory(cellFactory);
```
在这个例子中,我们创建了一个Callback,用于创建自定义的TableCell。在updateItem方法中,我们首先调用父类的updateItem方法来设置单元格的文本和图形。然后获取当前行的数据,如果该行数据的某个列的值等于需要标红的值,就将文本颜色设置为红色,否则设置为黑色。
最后,我们需要将自定义的cellFactory设置给TableColumn。
阅读全文