gpt4 book ai didi

JavaFX TableView 如果使用 HashMap ,如何向特定单元格填充颜色

转载 作者:行者123 更新时间:2023-11-30 02:06:02 25 4
gpt4 key购买 nike

我使用数据的 HashMap 创建了一个 Java TableView。在 HashMap 中,键是某个单词,值是包含该单词的频率。我还为 dataModel 实现了 ObservableList。

假设我们有一个表格 View ,其中第一列代表首都城市( HashMap 的键),第二列代表访问某个城市的频率( HashMap 的值),即

Cities          No. of times visited

Amsterdam 2

Berlin 4

Rome 6

我现在想用颜色填充第二列中的某些单元格。例如,所有值大于 2 的单元格应为黄色,值 >4 的单元格应为橙色,值 >6 的单元格应为红色。但我不知道该怎么做。以下是一些代码片段,显示了我已经做了什么:

//create HashMap
HashMap<String, Integer[]> listMap;

//ObservableList
public static ObservableList<Map.Entry<String, Integer[]>> items;

//create table
TableView<Map.Entry<String, Integer[]>> table = new TableView<>(items);

//column words (key of hashmap)
words.setCellValueFactory(new PropertyValueFactory<>("words"));

//return property from hashmap for cell
words.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Map.Entry<String, Integer[]>, String>, ObservableValue<String>>()
{
@Override
public ObservableValue<String> call(TableColumn.CellDataFeatures<Map.Entry<String, Integer[]>, String> p)
{
return new SimpleStringProperty(p.getValue().getKey());
}
});

firstColumn.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Map.Entry<String, Integer[]>, String>, ObservableValue<String>>()
{
@Override
public ObservableValue<String> call(TableColumn.CellDataFeatures<Map.Entry<String, Integer[]>, String> p)
{
return new SimpleStringProperty(String.valueOf(p.getValue().getValue());
}
});

有人能解决这个问题吗?谢谢:)

最佳答案

使用cell factory定义单元格的渲染行为。 cell value factory仅定义填充行为。

示例:

firstColumn.setCellFactory(column -> {
return new TableCell<YourObject, Integer>() {

@Override
protected void updateItem(Integer item, boolean empty) {
super.updateItem(item, empty);

if (item == null || empty) {
setBackground(new Background(new BackgroundFill(Color.WHITE, CornerRadii.EMPTY, Insets.EMPTY)));
} else {

if(item > 2)
setBackground(new Background(new BackgroundFill(Color.YELLOW, CornerRadii.EMPTY, Insets.EMPTY)));
else if(item > 4)
setBackground(new Background(new BackgroundFill(Color.RED, CornerRadii.EMPTY, Insets.EMPTY)));
else
setBackground(new Background(new BackgroundFill(Color.WHITE, CornerRadii.EMPTY, Insets.EMPTY)));
}
}
};
});

如果您想显示与该值关联的文本,例如,当值 < 2 时显示“OK”,当值 > 2 时显示“警告”,当值 > 4 时显示“危险”,您可以使用 setText 来实现(“一些文本”) 就在 setBackground() 旁边。然后,单元格将根据单元格的值显示文本。

if (item == null || empty) {
setText("");
setBackground(new Background(new BackgroundFill(Color.WHITE, CornerRadii.EMPTY, Insets.EMPTY)));
} else {

if(item > 2) {
setText("Warning");
setBackground(new Background(new BackgroundFill(Color.YELLOW, CornerRadii.EMPTY, Insets.EMPTY)));
} else if(item > 4) {
setText("Danger");
setBackground(new Background(new BackgroundFill(Color.RED, CornerRadii.EMPTY, Insets.EMPTY)));
} else {
setText("OK");
setBackground(new Background(new BackgroundFill(Color.WHITE, CornerRadii.EMPTY, Insets.EMPTY)));
}
}

关于JavaFX TableView 如果使用 HashMap ,如何向特定单元格填充颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51343291/

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