Listview 行颜色javafx列表视图

Listview 行颜色javafx列表视图,listview,javafx,Listview,Javafx,我的ListView控件有问题。我想我的奇数行和偶数行有不同的颜色,但我想从代码而不是从FXML来做。例如: 第一行-颜色为绿色 第二排-颜色为红色 第三行-彩色格伦 第四排-红色 现在我有类似的东西,但这改变了所有ListView的背景,而不是单行 rightListView.setCellFactory(param -> new ListCell<Group>() { @Override protected void updateItem(G

我的ListView控件有问题。我想我的奇数行和偶数行有不同的颜色,但我想从代码而不是从FXML来做。例如:

第一行-颜色为绿色 第二排-颜色为红色 第三行-彩色格伦 第四排-红色 现在我有类似的东西,但这改变了所有ListView的背景,而不是单行

rightListView.setCellFactory(param -> new ListCell<Group>() {
        @Override
        protected void updateItem(Group item, boolean empty) {
            super.updateItem(item, empty);

            if (empty || item == null || item.getName() == null) {
                setText(null);
            } else {
                setText(item.getName());
            }
            for(int k=0;k<rightListView.getItems().size();k++) {
                if (k%2==0)
                    setStyle("-fx-background-color: blue;");
                else
                    setStyle("-fx-background-color: red;");
            }
        }
    });

如何解决此问题?

实现此结果的最简单方法是CSS样式表:

scene.getStylesheets().add("style.css");
样式表 .列表视图.列表单元格:奇数{ -背景色:红色; } .列表视图.列表单元格:偶数{ -背景色:蓝色; } 您可能需要将.list视图选择器替换为选择应应用此样式的ListView的选择器。这样做的好处是,与使用代码相比,您可以更轻松地保持:selected样式

.列表视图.列表单元格:奇数{ -背景色:红色; } .列表视图.列表单元格:偶数{ -背景色:蓝色; } .列表视图.列表单元格:选中:奇数, .列表视图.列表单元格:选定:偶数{ -fx背景色:-fx背景; } 但是,如果要在java代码中使用setStyle应用样式,则应在updateItem中使用getIndex:

rightListView.setCellFactory(param -> new ListCell<Group>() {
    @Override
    protected void updateItem(Group item, boolean empty) {
        super.updateItem(item, empty);

        if (empty || item == null) {
            setText(null);
            setStyle(null);
        } else {
            setText(item.getName());
            setStyle(getIndex() % 2 == 0 ? "-fx-background-color: blue;" : "-fx-background-color: red;");
        }
    }
});