listview - 行颜色javafx listview

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

我该如何解决这个问题?

最佳答案

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

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

样式.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 应用样式,您应该在 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;");
        }
    }
});

关于listview - 行颜色javafx listview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51378585/

相关文章:

java - 当我从另一 Activity 获取结果时,ListView 仅更新一个 View 项,如何获取所有过去的结果?

flutter - 如何最好地让我的滚动 Controller 在整个应用程序中可用?

css - 调整按钮内的文本大小

java - 为什么 Java 在第二个场景中不显示按钮

java - 序列化 JavaFX 组件

c# - 更改单个 ListView 项目

android - 当我使用自定义适配器上下滚动 ListView 的速度太快时,getView() 开始表现异常。为什么?

css - 如何在 JavaFX 标签的文本周围绘制边框?

在循环内调用appendText()时JavaFx TextArea卡住

qt - QML ListView 方法 positionViewAtEnd() 完全相反