Javafx Tableview 如何为具有特定值的单元格着色
Javafx Tableview How To Color Cells with Specific Value
有没有办法只为某些具有特定值 a 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();
}
};
有没有办法只为某些具有特定值 a 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();
}
};