【问题标题】:JavaFX ListView shape colorJavaFX ListView 形状颜色
【发布时间】:2017-10-26 01:26:28
【问题描述】:

我正在尝试根据 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)。

【问题讨论】:

    标签: java listview javafx


    【解决方案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()中的代码需要覆盖所有情况。

    【讨论】:

    • 天啊!我怎么没想到呢?谢谢詹姆斯!
    猜你喜欢
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多