我对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;");
}
}
});
我该如何解决?
答案 0 :(得分:2)
获得此结果的最简单方法是CSS样式表:
scene.getStylesheets().add("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;");
}
}
});