获取具有某些条件的特定行tableView项(JavaFX)

时间:2018-03-22 21:33:45

标签: java uitableview javafx row

我正在为一个人出席TableView。我正在获取tableView行,如果该特定日期的人具有状态" present" (字符串)然后我想更改特定行并将其背景颜色更改为绿色。

然后,如果他是'#34;缺席"在特定那天,我想要更改该行并设置红色背景。

否则如果行中没有日期和状态,我需要再次更改行并设置白色背景。

问题:它会通过第一个 if 语句,然后将每一行设置为绿色,因为第一个语句是" true"。

我想只获取带有礼物的行,并将该行仅设置为绿色背景颜色。

* getStatus返回String

studentTable.setRowFactory(tableView -> {
    final TableRow<Attendance> row = new TableRow<>();

        for (Attendance item : studentTable.getItems()) {
            if (item.getStatus().equals("present")) {
                row.setStyle("-fx-background-color:green;");
            }
            else if (item.getStatus().equals("absent")){
                row.setStyle("-fx-background-color:red;");
            }
            else {
                row.setStyle("-fx-background-color:white;");
            }
        }
return row;
    });
}

图片结果:Image

我会感谢任何解决方案和任何帮助:)

1 个答案:

答案 0 :(得分:1)

您的所有代码都需要在需要时创建TableRow,然后每次创建TableRow时,它都会迭代所有表中的项目,不断变化一行的样式。因此,该行将简单地具有由表的项目列表中的最后一项确定的样式(因为该项目确定对setStyle(...)的最终调用)。当然,你为你创建的每一行都这样做,所以不出所料,每一行都有相同的风格。

首次使用行显示TableRow实例时会调用updateItem(...)的{​​{1}}方法,并且每次重复使用该行以显示不同的{{1}时实例。因此,您需要覆盖Attendance并将逻辑放在那里。

Attendance