有没有一种方法可以只为具有 TableView
特定值的某些单元格着色?
Callback<TableColumn, TableCell> historyTableCellFactory
= new Callback<TableColumn, TableCell>() {
public TableCell call(TableColumn p) {
TableCell newCell = new TableCell<CustomerHistoryStructure, String>() {
private Text newText;
@Override
public void updateItem(String items, boolean empty) {
super.updateItem(items, empty);
if (!isEmpty()) {
newText = new Text(items.toString());
newText.setWrappingWidth(140);
this.setStyle("-fx-background-color:#e50000 ;");
setGraphic(newText);
}
}
private String getString() {
return getItem() == null ? "" : getItem().toString();
}
};
return newCell;
}
};
上面代码的问题在于,当程序运行并且我在 TableView
上滚动时,其他单元格会自行着色。
该代码的问题在于您永远不会撤消添加元素时所做的更改。您永远不会删除 graphic
,即使单元格变空并且您永远不会检查特定值。此外,如果添加 null
项,items.toString()
可能会导致 NPE。也不需要重新创建 Text
元素。此外,您永远不会将元素与特定值进行比较。
final String specificValue = ...
new TableCell<CustomerHistoryStructure, String>() {
private final Text newText;
{
newText = new Text();
newText.setWrappingWidth(140);
}
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setGraphic(null);
setStyle("");
} else {
newText.setText(getString());
setGraphic(newText);
// adjust style depending on equality of item and specificValue
setStyle(Objects.equals(item, specificValue) ? "-fx-background-color:#e50000 ;" : "");
}
}
private String getString() {
return getItem() == null ? "" : getItem().toString();
}
};
我是一名优秀的程序员,十分优秀!