Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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 这是我的代码中的错误还是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实

我在listview中使用了一个cellfactory,根据文本的截止日期将文本颜色设置为不同的值。但是当我向列表中添加新项目时,不满足if-else条件的项目也会突出显示


这是基于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;
    }
});