行颜色javafx listview

时间:2018-07-17 10:04:27

标签: listview javafx

我对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;");
            }
        }
    });

我该如何解决?

1 个答案:

答案 0 :(得分:2)

获得此结果的最简单方法是CSS样式表:

scene.getStylesheets().add("style.css");

style.css

.list-view .list-cell:odd {
    -fx-background-color: red;
}

.list-view .list-cell:even {
    -fx-background-color: blue;
}

您可能需要将.list-view选择器替换为选择应应用此样式的ListView的选择器。这样做的好处是,您可以比使用代码更轻松地保持:selected样式。

.list-view .list-cell:odd {
    -fx-background-color: red;
}

.list-view .list-cell:even {
    -fx-background-color: blue;
}

.list-view .list-cell:selected:odd,
.list-view .list-cell:selected:even {
    -fx-background-color: -fx-background;
}

如果您想在Java代码中使用setStyle来应用样式,则应在getIndex中使用updateItem

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;");
        }
    }
});