有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JavaFX ListView形状颜色

我正在尝试根据ListView上的用户状态设置不同的颜色。但当我滚动ListView时,另一些单元格也会改变其形状,例如:

我需要这样的形状(每个矩形都在一个单元格内):

Image 1

但是在一些卷轴之后,它们保持这样:

enter image description here

这是我代码的一部分:

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) 个答案

  1. # 1 楼答案

    你需要一个else来配合你的if

    // surely you shouldn't actually be testing for string equality here?
    if ( user.getUserStatus().toString().equals("3") ) {
        statusShape.setFill(Color.RED);
    } else {
        // or whatever the default color is...
        statusShape.setFill(Color.BLUE);
    }
    

    问题是,如果一个单元格保存了一个状态为3的用户,然后被重新使用(例如在用户滚动期间)来保存一个状态不同的用户,那么颜色将不会重置,除非您明确为其编码

    基本规则是updateItem()中的代码需要覆盖所有情况