java JavaFX ListView形状颜色
我正在尝试根据ListView上的用户状态设置不同的颜色。但当我滚动ListView时,另一些单元格也会改变其形状,例如:
我需要这样的形状(每个矩形都在一个单元格内):
但是在一些卷轴之后,它们保持这样:
这是我代码的一部分:
userListView.setCellFactory(userCell -> new UserCellController());
类UserCellController:
public class UserCellController extends ListCell<UserPopulate> {
@FXML
private Rectangle statusShape;
private FXMLLoader mLLoader;
@Override
protected void updateItem(UserPopulate user, boolean empty) {
super.updateItem(user, empty);
if(empty || user == null) {
setText(null);
setGraphic(null);
} else {
if (mLLoader == null) {
mLLoader = new FXMLLoader(getClass().getResource("/view/userCell.fxml"));
mLLoader.setController(this);
try {
mLLoader.load();
} catch (IOException e) {
e.printStackTrace();
}
}
if ( user.getUserStatus().toString().equals("3") ) {
statusShape.setFill(Color.RED);
}
setText(null);
setGraphic(cellPane);
}
}
}
我只需要第二个红色单元格(用户状态=3)
# 1 楼答案
你需要一个
else
来配合你的if
:问题是,如果一个单元格保存了一个状态为
3
的用户,然后被重新使用(例如在用户滚动期间)来保存一个状态不同的用户,那么颜色将不会重置,除非您明确为其编码基本规则是
updateItem()
中的代码需要覆盖所有情况