gpt4 book ai didi

css - Javafx Tableview 如何为具有特定值的单元格着色

转载 作者:太空宇宙 更新时间:2023-11-04 09:50:03 24 4
gpt4 key购买 nike

有没有一种方法可以只为具有 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();
}
};

关于css - Javafx Tableview 如何为具有特定值的单元格着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39182782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com