Java 这是我的代码中的错误还是cellfactory的问题 todoitemsListview.setCellFactory(新回调(){ @凌驾 公共ListCell调用(ListView到DoItemsListView){ ListCell=新ListCell(){ @凌驾 受保护的void updateItem(ToDoItems项,布尔值为空){ super.updateItem(项,空); if(空){ setText(空); }否则{ setText(items.getItemName()); 如果(items.getDeadline().equals(LocalDate.now())){ System.out.println(items.getDeadline().toString()); System.out.println(items.getItemName()); setTextFill(颜色为红色); }else如果(items.getDeadline().equals(LocalDate.now().plusDays(1))){ System.out.println(items.getDeadline().toString()); System.out.println(items.getItemName()); setTextFill(颜色:蓝色); }else如果(items.getDeadline()等于(LocalDate.now().plusDays(2))){ System.out.println(items.getDeadline().toString()); System.out.println(items.getItemName()); setTextFill(颜色为绿色); }else if(items.getDeadline().isBefore(LocalDate.now())){ System.out.println(items.getDeadline().toString()); System.out.println(items.getItemName()); setTextFill(颜色:灰色); } } } }; 返回单元; } });
我在listview中使用了一个cellfactory,根据文本的截止日期将文本颜色设置为不同的值。但是当我向列表中添加新项目时,不满足if-else条件的项目也会突出显示Java 这是我的代码中的错误还是cellfactory的问题 todoitemsListview.setCellFactory(新回调(){ @凌驾 公共ListCell调用(ListView到DoItemsListView){ ListCell=新ListCell(){ @凌驾 受保护的void updateItem(ToDoItems项,布尔值为空){ super.updateItem(项,空); if(空){ setText(空); }否则{ setText(items.getItemName()); 如果(items.getDeadline().equals(LocalDate.now())){ System.out.println(items.getDeadline().toString()); System.out.println(items.getItemName()); setTextFill(颜色为红色); }else如果(items.getDeadline().equals(LocalDate.now().plusDays(1))){ System.out.println(items.getDeadline().toString()); System.out.println(items.getItemName()); setTextFill(颜色:蓝色); }else如果(items.getDeadline()等于(LocalDate.now().plusDays(2))){ System.out.println(items.getDeadline().toString()); System.out.println(items.getItemName()); setTextFill(颜色为绿色); }else if(items.getDeadline().isBefore(LocalDate.now())){ System.out.println(items.getDeadline().toString()); System.out.println(items.getItemName()); setTextFill(颜色:灰色); } } } }; 返回单元; } });,java,user-interface,javafx,Java,User Interface,Javafx,我在listview中使用了一个cellfactory,根据文本的截止日期将文本颜色设置为不同的值。但是当我向列表中添加新项目时,不满足if-else条件的项目也会突出显示 这是基于ObservabelList的基本ToDo应用程序的一部分,其中ToDoItems类有三个属性,itemName、ItemDeDescription和Deadline。列表视图中的单元格可在需要时重用。因此,在您的例子中,您已经使用红色填充设置了一个特定的单元格,但是当相同的单元格被重新用于不同的ToDoItems实
这是基于ObservabelList的基本ToDo应用程序的一部分,其中ToDoItems类有三个属性,itemName、ItemDeDescription和Deadline。列表视图中的单元格可在需要时重用。因此,在您的例子中,您已经使用红色填充设置了一个特定的单元格,但是当相同的单元格被重新用于不同的
ToDoItems
实例时(因为您向下滚动或在列表中添加了一个新项),并且新的ToDoItems
实例不会满足任何更改填充颜色的条件,单元格将错误地保留其先前的填充颜色
如果不满足示例中的任何条件,您需要做的是确保返回默认颜色:
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;
}
});
todoitemsListview.setCellFactory(新回调(){
@凌驾
公共ListCell调用(ListView到DoItemsListView){
ListCell=新ListCell(){
@凌驾
受保护的void updateItem(ToDoItems项,布尔值为空){
super.updateItem(项,空);
if(空){
setText(空);
setTextFill(颜色:黑色);
}否则{
setText(items.getItemName());
如果(items.getDeadline().equals(LocalDate.now())){
System.out.println(items.getDeadline().toString());
System.out.println(items.getItemName());
setTextFill(颜色为红色);
}else如果(items.getDeadline().equals(LocalDate.now().plusDays(1))){
System.out.println(items.getDeadline().toString());
System.out.println(items.getItemName());
setTextFill(颜色:蓝色);
}else如果(items.getDeadline()等于(LocalDate.now().plusDays(2))){
System.out.println(items.getDeadline().toString());
System.out.println(items.getItemName());
setTextFill(颜色为绿色);
}else if(items.getDeadline().isBefore(LocalDate.now())){
System.out.println(items.getDeadline().toString());
System.out.println(items.getItemName());
setTextFill(颜色:灰色);
}否则{
setTextFill(颜色:黑色);
}
}
}
};
返回单元;
}
});
错误在您的代码中。您需要在所有条件下设置全文,包括空单元格和最后期限超过四天的单元格。
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);
setTextFill(Color.BLACK);
} 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);
} else {
setTextFill(Color.BLACK);
}
}
}
};
return cell;
}
});