JavaFX通过TableView单元格(按行方式)迭代并设置背景颜色

时间:2016-12-15 10:07:12

标签: tableview javafx-8

我的tableview上有31列(第1天31天)和12行(月份名称)。我想搜索完整的表格(行式搜索)以获取数据(日期),并且只需为该匹配的单元格设置背景颜色。我可以看到可以设置背景颜色使用cellfactory函数在特定列中的单元格。

  birthdayColumn.setCellFactory(column -> {
        return new TableCell<Person, LocalDate>() {
            @Override
            protected void updateItem(LocalDate item, boolean empty) {
                super.updateItem(item, empty);
                  if (item == null || empty) {
            setText(null);
            setStyle("");
        } 

            // Style all dates in March with a different color.
            if (item. == Month.MARCH) {
                setTextFill(Color.CHOCOLATE);
                setStyle("-fx-background-color: yellow");
            } else {
                setTextFill(Color.BLACK);
                setStyle("");
            }
       };
    });

这里只检查一个名为&#39; birthdayColumn&#39;。但在我的情况下,它应该在一个方法中检查所有表格单元格(行方向),并且只需要为该匹配单元格设置背景颜色。我该怎么做。提前谢谢你

1 个答案:

答案 0 :(得分:0)

这应该有效:

    LocalDate myBirthday = null; //initialize with the date you need to highlight

    birthdayColumn.setCellFactory(column -> {
        return new TableCell<Person, LocalDate>() {
            @Override
            protected void updateItem(LocalDate item, boolean empty) {
                super.updateItem(item, empty);
                if (item == null || empty) {
                    setText(null);
                    setGraphic(null);
                } 
                else {
                    setText(item.toString());
                    setGraphic(null);

                    if (item.equals(myBirthday)) {
                        setTextFill(Color.CHOCOLATE);
                        setStyle("-fx-background-color: yellow");
                    }
                    else {
                        setTextFill(Color.BLACK);
                        setStyle("");
                    }
                }
            }};
    });