我正在JList中进行自定义渲染。我的自定义ListCellRenderer使用静态字符串,以便它可以对照该变量的先前出现来测试该变量的值。

    private static String lastUsername = "";

    public Component getListCellRendererComponent(JList list, Object value, int index, boolean  isSelected, boolean cellHasFocus) {
        User user = (User)value;
        if (lastUsername == user.getUsername()) {
            // Do something
        } else {
            // Do something else
            lastUsername = user.getUsername();
        }


现在,当程序首次加载时效果很好,但是如果我滚动列表,则会导致问题,因为lastUsername变量仍设置为遇到的最后一个用户名,而实际上它应该是一个空字符串。基本上,在渲染所有单元之前或之后,lastUsername需要重置为空字符串。有人知道我是否可以重写JList post / pre AllCellsRendered事件/挂钩来实现此目的?

最佳答案

比较带有==而不是等于的String对象的常见错误。请尝试使用if (lastUsername.equals( user.getUsername() ))

10-06 16:05