有没有办法只为某些特定值为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
时,其他单元格会自行着色。
答案 0 :(得分:1)
该代码的问题在于您永远不会撤消添加项目时所做的更改。您永远不会删除graphic
,即使单元格变空并且您从不检查特定值。如果添加items.toString()
项,null
可能会导致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();
}
};