我正在为一个人出席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
我会感谢任何解决方案和任何帮助:)
答案 0 :(得分:1)
您的所有代码都需要在需要时创建TableRow
,然后每次创建TableRow
时,它都会迭代所有表中的项目,不断变化一行的样式。因此,该行将简单地具有由表的项目列表中的最后一项确定的样式(因为该项目确定对setStyle(...)
的最终调用)。当然,你为你创建的每一行都这样做,所以不出所料,每一行都有相同的风格。
首次使用行显示TableRow
实例时会调用updateItem(...)
的{{1}}方法,并且每次重复使用该行以显示不同的{{1}时实例。因此,您需要覆盖Attendance
并将逻辑放在那里。
Attendance