JavaFX ListView形状颜色

时间:2017-10-26 01:26:28

标签: java listview javafx

我尝试根据ListView上的用户状态设置不同的颜色。但是当我滚动ListView时,另外一些单元格也会改变它的形状作为例子:

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

Image 1

但是在一些卷轴之后,它们仍然是这样的:

enter image description here

这是我的代码的一部分:

userListView.setCellFactory(userCell -> new UserCellController());

Class 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);

        }

    }

}

我只需要具有RED形状的第二个单元格(用户状态== 3)。

1 个答案:

答案 0 :(得分:0)

您需要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()中的代码需要涵盖所有情况。