todoitemsListview.setCellFactory(new Callback<ListView<ToDoItems>, ListCell<ToDoItems>>() {
@Override
public ListCell<ToDoItems> call(ListView<ToDoItems> toDoItemsListView) {
ListCell<ToDoItems> cell= new ListCell<ToDoItems>(){
@Override
protected void updateItem(ToDoItems items, boolean empty) {
super.updateItem(items, empty);
if(empty){
setText(null);
}else {
setText(items.getItemName());
if (items.getDeadline().equals(LocalDate.now())){
System.out.println(items.getDeadline().toString());
System.out.println(items.getItemName());
setTextFill(Color.RED);
}else if (items.getDeadline().equals(LocalDate.now().plusDays(1))){
System.out.println(items.getDeadline().toString());
System.out.println(items.getItemName());
setTextFill(Color.BLUE);
}else if (items.getDeadline().equals(LocalDate.now().plusDays(2))){
System.out.println(items.getDeadline().toString());
System.out.println(items.getItemName());
setTextFill(Color.GREEN);
}else if(items.getDeadline().isBefore(LocalDate.now())){
System.out.println(items.getDeadline().toString());
System.out.println(items.getItemName());
setTextFill(Color.GREY);
}
}
}
};
return cell;
}
});
我在listview中使用了一个cellfactory,根据文本的截止日期将文本颜色设置为不同的值。但是当我向列表中添加新项时,不满足if-else条件的项也会高亮显示。
这是基于observabellist的基本todo应用程序的一部分,其中todoitems类有三个属性:itemname、itemdesription和deadline。
1条答案
按热度按时间u7up0aaq1#
a中的细胞
ListView
在需要时重复使用。所以在您的例子中,您设置了一个带有红色填充的特定单元格,但是当同一单元格被重新用于不同的ToDoItems
示例(因为您向下滚动或在列表中添加了一个新项),并且ToDoItems
示例不会填充任何更改填充颜色的条件,单元格将错误地保留其以前的填充颜色。如果不满足示例中的任何条件,则需要确保返回到默认颜色: