如何使用 JavaFX 中的复选框从列表视图更新单元格的背景颜色?

How to update the background color of the cells from a list view with checkboxes in JavaFX?

所以,我在 JavaFX 中得到了一个列表视图,并且我在每个单元格中添加了一个复选框。

listView.setCellFactory(CheckBoxListCell.forListView(new Callback<String, ObservableValue<Boolean>>() {
    @Override
    public ObservableValue<Boolean> call(String item) {
        BooleanProperty observable = new SimpleBooleanProperty();
        observable.addListener((obs, wasSelected, isNowSelected) -> selected.add(item));

        return observable;
    }
}));

进行一些处理后,我需要能够根据某些结果更改每个单元格的背景颜色(颜色为 green/red) 我找到了一种方法:

listView.setCellFactory(list -> {
    return new ListCell() {
        @Override
        protected void updateItem(Object item, boolean empty) {
            super.updateItem(item, empty);

            if (passed.contains(item))
                setStyle("-fx-background-color: green; -fx-text-fill: white");
            else
                setStyle("-fx-background-color: red; -fx-text-fill: white");

            setText((String) item);
        }
    };
});

问题是这会为列表视图设置新的单元格并删除复选框。

是否可以通过某种方式更改背景颜色并保留复选框?

你可以这样做:

listView.setCellFactory(list -> new CheckBoxListCell(item -> {
    BooleanProperty observable = new SimpleBooleanProperty();
    observable.addListener((obs, wasSelected, isNowSelected) ->
            selected.add(item)
    );
    return observable;
}) {
    @Override
    public void updateItem(Object item, boolean empty) {
        super.updateItem(item, empty);
        if (passed.contains(item)){
            setStyle("-fx-background-color: green; -fx-text-fill: white");
            setText((String) item);
        }else {
            setStyle("-fx-background-color: red; -fx-text-fill: white");
            setText((String) item);
        }
    }
});